Skip to content

Instantly share code, notes, and snippets.

@jexp
Forked from peterneubauer/game_of_thrones.adoc
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jexp/8801847 to your computer and use it in GitHub Desktop.
Save jexp/8801847 to your computer and use it in GitHub Desktop.

The Game of Thrones in Neo4j

neoiscoming

The setup

 CREATE (westeros { name: "Westeros" })
 CREATE (targaryen { house:"Targaryen" }),(stark { house:"Stark" }),(lannister { house:"Lannister" }),
        (baratheon { house:"Baratheon" }),(tully { house:"Tully" })
 FOREACH (house IN [stark,lannister,baratheon,targaryen,tully]| CREATE house-[:HOUSE]->westeros)
 CREATE (danaerys { name:"Danaerys" }), danaerys-[:OF_HOUSE]->targaryen,
 (drogo { name:"Khal Drogo" }), danaerys-[:MARRIED_TO]->drogo,
 (tywin { name:"Tywin" }), tywin-[:OF_HOUSE]->lannister,
 (steffon { name:"Steffon" }), steffon-[:OF_HOUSE]->baratheon,
 (rickard { name:"Rickard" }), rickard-[:OF_HOUSE]->stark,
 (ned { name:"Eddard" }), ned-[:CHILD_OF]->rickard,
 (catelyn { name:"Catelyn" }), catelyn-[:MARRIED_TO]->ned, catelyn-[:OF_HOUSE]->tully,
 (jon { name:"Jon" }), jon-[:CHILD_OF]->ned
  FOREACH (child IN ["Robb", "Bran", "Arya", "Sansa", "Rickon"] |
    CREATE UNIQUE ned<-[:CHILD_OF]-({ name:child })-[:CHILD_OF]->catelyn)
 FOREACH (child IN ["Cersei", "Jamie", "Tyrion"] |
    CREATE UNIQUE tywin<-[:CHILD_OF]-({ name:child }))
 FOREACH (brother IN ["Robert", "Renly", "Stannis"] |
    CREATE UNIQUE steffon<-[:CHILD_OF]-({ name:brother }))
 FOREACH (child IN ["Joffrey", "Myrcella", "Tommen"] |
    CREATE UNIQUE tywin<-[:CHILD_OF]-(jamie { name:"Jamie" })<-[:CHILD_OF]-({ name:child })
                        -[:CHILD_OF]->(cersei { name:"Cersei" })-[:CHILD_OF]->tywin)

 CREATE UNIQUE steffon<-[:CHILD_OF]-(robert { name:"Robert" })<-[:MARRIED_TO]-(cersei { name:"Cersei" })-[:CHILD_OF]->tywin
 CREATE UNIQUE ned<-[:CHILD_OF]-(sansa { name:"Sansa" })-[:PROMISED_TO]->(joffrey { name:"Joffrey" })-[:CHILD_OF]->cersei
 CREATE UNIQUE ned<-[:CHILD_OF]-(sansa)-[:MARRIED_TO]->(tyrion { name:"Tyrion" })-[:CHILD_OF]->steffon

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