2016-05-25 7 views
0

Ich habe 2 Knoten A und B, mit einer Beziehung zwischen ihnen. A und B haben Statuseigenschaft (0 oder 1)9 Neo4J Match-Knoten, wo alle Knoten mit spezifischem Wert

Ich möchte alle Knoten A mit Status = 0 und ich will nur Knoten A, die B.status = 1 (aber alle b.status müssen gleich 1 sein, wenn einer der sie gleich 0 ich will nicht, Knoten A)

ich diese Abfrage

MATCH (a:A)-[r]-(b:B) WHERE a.status = 0 AND ALL(x IN b.status WHERE x = 1) 
RETURN a.status, b.status 

machen, aber ich habe einen Knoten mit b.status = 0 ...

Dank

Antwort

1

Aktualisieren nach Kommentar

Sie müssen den B-Knoten sammeln, um den Scheck mit ALL

MATCH (a:A)-[r]-(b:B) 
WHERE a.status = 0 
WITH a, collect(b) as bNodes 
WHERE ALL(x IN bNodes WHERE x.status = 1) 
UNWIND bNodes as b 
RETURN a.status, b.status 

Sie brauchen nicht ein All-Prädikat hier, genau das zu tun AND:

MATCH (a:A)-[r]-(b:B) 
WHERE a.status = 0 
AND b.status = 1 
RETURN a.status, b.status 
+0

Das ist nicht, was ich tun möchte. Ich möchte alle Knoten A erhalten, die ausschließlich b.status = 1 haben (alle b.status müssen alle gleich 1 sein). – Amos

+0

Ok ok, also gibt es mehrere B-Knoten mit dem gleichen A verbunden, wird meine Antwort ändern –

+0

Ich aktualisierte die Antwort, wenn es nicht das ist, was Sie wollen, erklären Sie bitte mehr durch Bearbeiten Ihrer Frage –