2014-04-18 6 views
3

Je ne suis pas très familier avec Neo4j parce que je l'utilise depuis plusieurs jours.Neo4j Trouver un chemin mais sans un certain nœud

Mais maintenant, je veux trouver chemin entre deux nœuds

comme chemin: A & D

A -> B -> C -> D

A -> B -> E - > D

A -> C -> E -> D

et en utilisant "OU PAS" pour éliminer le noeud B

donc je vais laisser le chemin A -> C -> E -> D

est-il possible de le faire?

Voici mon Cypher:

MATCH (home { name:'Grove' }),(school { name:'Moulton' }),(Ann {name:'Ann'}), 
p = ((home)-[*..4]->(school)) 
WHERE NOT ((home)-[]->(Ann)) 
RETURN p 

Il ne fonctionne pas pour moi

+0

Hey, pourriez-vous partager quelques informations db afin que nous puissions tester là-dessus. tels que ces objets création et relations. – elhoucine

Répondre

4

Vous pouvez utiliser le NONE prédicat dans la clause WHERE pour filtrer les chemins contenant le noeud B. Voir http://console.neo4j.org/?id=hppthl pour un exemple.

La déclaration Cypher ressemble à ceci:

MATCH p=(:Person { name:'A' })-[:KNOWS*..4]->(:Person { name:'D' }), 
     (without:Person { name:'B' }) 
WHERE NONE (x IN nodes(p) WHERE x=without) 
RETURN p 
+0

Vraiment super utile !! Merci beaucoup – Darrellwan

Questions connexes