2015-03-04 5 views
0

Il existe un graphique neo4j qui a plus d'un niveau. Je veux récupérer un nœud en premier avec ses nœuds de premier niveau et, après avoir récupéré tous les nœuds de premier niveau, je veux récupérer les nœuds de second niveau.Neo4j: Récupère d'abord tous les nœuds de premier niveau puis récupère les nœuds de deuxième niveau

J'ai écrit la requête suivante.

match(node{name:'some name'})-[r1]-(a) 

optional match(a)-[r2]-(b) 

return node,a,b 

Mais la requête ci-dessus d'abord correspondre premier nœud de niveau si le noeud donné relié au noeud de second niveau alors il récupère tous les seconds noeuds connectés au niveau et après qui viennent au premier nœud de niveau à nouveau et poursuivre le processus. (profondeur première approche). J'en ai besoin pour le faire comme la première approche de largeur.

+0

Vous voulez dire que vous voulez exécuter deux requêtes? – MarcoL

Répondre

0

Votre langue implique que vous avez une sorte de hiérarchie pour moi et que vous souhaitiez probablement ajouter une direction à votre requête. L'autre chose que vous voulez faire est d'utiliser l'instruction with pour prendre un résultat de votre première requête et l'utiliser comme point de départ pour votre deuxième requête. L'utilisation de la direction dans votre deuxième requête est l'importation car sans elle, les nœuds a que vous correspondez en premier correspondent simplement à votre nœud de départ d'origine. La fonction coalesce prend simplement en charge les instances où a n'a pas d'enfant.

match (start {name : 'some name'})-->(a) 
with a 
optional match a-->b 
return a, coalesce(null, 'no child')