2017-07-15 5 views
1

Je modélise une généalogie sur un graphique dans Neo4J inspiré du fichier GEDCOM.Neo4J/Cypher: longueur variable du chemin d'accès

Mes nœuds et les relations sont:

Individual <-[CHILD]- Family 
Family -[HUSBAND]-> Individual 
Family -[WIFE]-> Individual 

Je ne modélise pas la famille comme une relation parce que je peux avoir plusieurs événements attachés (fiançailles, mariage, annulation, divorce, ...):

Family -[OCCUR]-> FamilyEvent{type,subtype,date,place,note} 

je peux obtenir le père et la mère d'une personne avec cette requête Cypher:

MATCH (i:Individual {nickname:'Louis XVI'}) 
     <-[r:CHILD]- 
    (m:Family) 
     -[r2:HUSBAND|WIFE]-> 
    (h:Individual) 
    return i,r,m,r2,h 

Ou l'enfant d'une personne:

MATCH (i:Individual {nickname:'le Pieux ou le Débonnaire'}) 
     <-[r:HUSBAND]- 
    (m:Family) 
     -[r2:CHILD]-> 
    (h:Individual) 
    return i,r,m,r2,h 

Mais comment puis-je obtenir tous les ascendants ou descendants d'une personne?
(En autre manière, comment puis-je répéter le modèle entre l'individu ou d'appliquer le même modèle à personne que je reçois à chaque niveau?)

Répondre

0

Vous pouvez utiliser cette requête

match (n:individual{id:###})<-[:child*..9]-(n) return n,m 

pour créer l'arbre des ancêtres ou la flèche pointant vers l'opposé pour les descendants.