Skip to content

Instantly share code, notes, and snippets.

@peterneubauer
Last active June 3, 2019 11:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save peterneubauer/6029850 to your computer and use it in GitHub Desktop.
Save peterneubauer/6029850 to your computer and use it in GitHub Desktop.

The Game of Thrones in Neo4j

neoiscoming

The setup

CREATE
(_0 { name:"Westeros" }),
(_1 { house:"Tully" }),
(_2 { house:"Baratheon" }),
(_3 { house:"Lannister" }),
(_4 { house:"Stark" }),
(_5 { house:"Targaryen" }),
(_6 { name:"Jon" }),
(_7 { name:"Catelyn" }),
(_8 { name:"Eddard" }),
(_9 { name:"Rickard" }),
(_10 { name:"Steffon" }),
(_11 { name:"Tywin" }),
(_12 { name:"Khal Drogo" }),
(_13 { name:"Danaerys" }),
(_14 { name:"Robb" }),
(_15 { name:"Bran" }),
(_16 { name:"Arya" }),
(_17 { name:"Sansa" }),
(_18 { name:"Rickon" }),
(_19 { name:"Cersei" }),
(_20 { name:"Jamie" }),
(_21 { name:"Tyrion" }),
(_22 { name:"Robert" }),
(_23 { name:"Renly" }),
(_24 { name:"Stannis" }),
(_25 { name:"Joffrey" }),
(_26 { name:"Myrcella" }),
(_27 { name:"Tommen" }),
(_28 { name:"Tyrion" }),
_1-[:HOUSE]->_0,
_2-[:HOUSE]->_0,
_3-[:HOUSE]->_0,
_4-[:HOUSE]->_0,
_5-[:HOUSE]->_0,
_6-[:CHILD_OF]->_8,
_7-[:OF_HOUSE]->_1,
_7-[:MARRIED_TO]->_8,
_8-[:CHILD_OF]->_9,
_9-[:OF_HOUSE]->_4,
_10-[:OF_HOUSE]->_2,
_11-[:OF_HOUSE]->_3,
_13-[:OF_HOUSE]->_5,
_13-[:MARRIED_TO]->_12,
_14-[:CHILD_OF]->_8,
_14-[:CHILD_OF]->_7,
_15-[:CHILD_OF]->_8, _15-[:CHILD_OF]->_7, _16-[:CHILD_OF]->_8, _16-[:CHILD_OF]->_7, _17-[:MARRIED_TO]->_28, _17-[:CHILD_OF]->_8, _17-[:CHILD_OF]->_7, _17-[:PROMISED_TO]->_25, _18-[:CHILD_OF]->_8, _18-[:CHILD_OF]->_7, _19-[:MARRIED_TO]->_22, _19-[:CHILD_OF]->_11, _20-[:CHILD_OF]->_11, _21-[:CHILD_OF]->_11, _22-[:CHILD_OF]->_10, _23-[:CHILD_OF]->_10, _24-[:CHILD_OF]->_10, _25-[:CHILD_OF]->_20, _25-[:CHILD_OF]->_19, _26-[:CHILD_OF]->_20, _26-[:CHILD_OF]->_19, _27-[:CHILD_OF]->_20, _27-[:CHILD_OF]->_19, _28-[:CHILD_OF]->_10

Find all children of all houses

MATCH (westeros)<-[:HOUSE]-(house)<-[:OF_HOUSE]-(ancestor), family=(ancestor)<-[:CHILD_OF*0..]-(last)
WHERE westeros.name='Westeros'
RETURN house.house, collect(DISTINCT last.name)

Find all the children of parents that are siblings (a.k.a. incest)

MATCH (kid)-[:CHILD_OF]->(parent1)-[:CHILD_OF]->(ancestor)<-[:CHILD_OF]-(parent2)<-[:CHILD_OF]-(kid)
RETURN DISTINCT kid.name as name

Easy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment