2016-04-06 1 views
4

Ich habe ein Problem beim Abrufen von Pfad in Neo4j auszuschließen bestimmte Label.Neo4j Match-Pfad Knoten mit bestimmten Label ausschließen

Foe Beispiel habe ich

   -->(h)-->(j) 
      /
(a)-->(b)-->(c)-->(d)-->(i) 
     \   
     -->(f)-->(g) 

mit h Knoten eine Deleted Label hat.

Ich habe Abfrage

MATCH path = (n)-[*]->(child) where id(n)={id of node a} and NOT child:Deleted RETURN path 

dann will ich diese Abfrage den vollständigen Pfad zurückzukehren, aber die Unterstruktur des Knotens h da der Knoten h ist Deleted auszuschließen.

sollte die Rückkehr Baum wie sein

(a)-->(b)-->(c)-->(d)-->(i) 
     \   
     -->(f)-->(g) 

Aber die Abfrage scheint nicht funktioniert.

Kann mir jemand dabei helfen.

Dank

Antwort

-1

Sie müssen beide Knoten für das Label überprüfen:

match p=((a)-[r:NEXT]->(b)) 
where not (a:Deleted or b:Deleted) 
return p 

hier ein weiteres Beispiel:

match (a)-[r:NEXT]->(b) 
where not (("Deleted" in labels(a)) or 
      ("Deleted" in labels(b))) 
return a, r, b 
+0

Hallo Tim, ich möchte eigentlich alle Knoten überprüfen, nicht nur a und b. – jasonfungsing

+0

Dies ist ein passendes Muster, daher werden alle Knoten überprüft. Ich habe deine Grafik hier dupliziert und das macht was du willst. –

+0

nicht sicher, ich verstehe es richtig. Sieht so aus, als würde er nur bis zum Knoten b abrufen und nicht weiter zum c- oder f-Knoten oder noch weiter gehen. – jasonfungsing

1

Was für mich gearbeitet eine Liste Verständnis über Knoten im Pfad :

MATCH path =()-[*]->() 
WHERE NONE(n IN nodes(path) WHERE n:Deleted) 
RETURN path 
1

Sie können APOC Procedures damit verwenden, indem Sie die Path-Expander-Funktionalität zusammen mit einer Blacklist verwenden, um zu verhindern, dass Knoten während des Traversierens mit Knoten in der Blacklist expandiert werden.

match (a) 
where id(a) = {id of node a} 
call apoc.path.expandConfig(a, {labelFilter:'-Deleted'}) yield path 
return path