2017-03-16 62 views
1

我發現有關檢查no outgoing relationships of a given label exist on a nodethis one for checking the count of outgoing relationships with a given property的問題,但我需要做的是獲取不具有關係的給定屬性設置的節點。我確信我會讓自己變得更加困難!如果與給定屬性沒有關係,則返回?

我到目前爲止是這樣的:

MATCH (n:Node)-[r:WEIGHTING]->() 
WHERE NOT(ANY(rel IN r WHERE EXISTS(r.PROP))) 
RETURN z 

但是,很明顯,r在這一點上是一個單一的關係,沒有關係的集合。我認爲我需要得到一個WITH條款涉及,但我非常深入我的深度!

我該如何着手獲得Node這一套,它們沒有傳出WEIGHTING關係的PROP屬性?

我希望這是足夠的細節 - 抱歉,如果它不清楚!

非常感謝, 湯姆

+0

如果這還回不具有任何傳出加權關係的所有節點,或者你只希望那些加權關係,但沒有一個有PROP財產? – InverseFalcon

回答

1

你可以這樣實現它:

MATCH (n:Node)-[r:WEIGHTING]->() 
WITH n, collect(r.PROP) AS props 
WHERE size(props) = 0 
RETURN n 

或者:

MATCH (n:Node)-[r:WEIGHTING]->() 
WITH n, collect(r) AS rs 
WHERE NONE (x IN rs WHERE EXISTS(x.PROP)) 
RETURN n 
+0

完美!每次我在SO上發佈信息時,我都會了解到Cypher中的全新功能。 「collect」正是我需要的 - 謝謝! – Tom

1

隨着Neo4j的存在往往是幾種方法可以做到你需要什麼。一個替代的查詢可以是:

MATCH (n:Node) 
// only need the next WHERE clause if a WEIGHTING relationship is required 
WHERE SIZE((n)-[:WEIGHTING]->()) > 0 
OPTIONAL MATCH (n)-[r:WEIGHTING]->() 
WHERE EXISTS (r.PROP) 
WITH n 
WHERE r is null 
RETURN n 
相關問題