2016-03-27 3 views
0

Ich habe diese Datenbank:Cypher-Bedingungen auf allen Knoten in der Auflistung verhält sich falsch?

CREATE (A:A {name:"A"})-[:R]->(B:B {name:"B"})-[:R]->(C:B {name:"C"})-[:R]->(D:A {name:"D"})-[:R]->(E:A {name:"E"}) 

Diese Abfrage

MATCH p = (:A)-[*]->(:B) WITH NODES(p)[1..] AS p_nodes RETURN p_nodes 

kehrt Kante (B)-->(C). Und B und C haben beide Label B. Warum fragt diese Abfrage dann

MATCH p = (:A)-[*]->(:B) WITH NODES(p)[1..] AS p_nodes 

WHERE ALL(x IN p_nodes[0..] WHERE LABELS(x) = "B") RETURN p_nodes 

zurück nichts (keine Zeilen)? Das einzige, was es tut, ist sicherzustellen, dass p_nodesB nur beschriftete Knoten enthält. Und wie es die erste Abfrage gezeigt hat.

Antwort

1

Die Funktion labels(x) gibt eine Zeichenfolge zurück, keine Zeichenfolge. Dies liegt daran, dass Knoten mehrere Labels haben können.

Statt labels(x) = "B" zu vergleichen verwenden, um die IN Betreiber "B" in labels(x):

MATCH p =(:A)-[*]->(:B) 
WITH NODES(p)[1..] AS p_nodes 
WHERE ALL (x IN p_nodes[0..] 
    WHERE "B" IN LABELS(x)) 
RETURN p_nodes 
Verwandte Themen