簡體   English   中英

Neo4j:如何查找所有節點:連接到具有特定屬性的0個節點或具有屬性集的所有節點

[英]Neo4j: How to find all nodes that: connected to either 0 nodes with specific property, or all nodes with property set

假設我有一個有向圖,其中有類型A和B的節點。類型A的節點可以連接到類型A或B的節點,類型B的節點沒有傳出連接。

而且,節點B具有boolean屬性。 我需要找到所有節點A:如果節點A至少與1個節點B相連,則沒有與節點B的直接或內部連接,只有在所有連接的節點B的屬性都設置為true的情況下,才應返回該節點。

換句話說,我需要找到所有未連接到屬性設置為false的B的A。

我試圖用查詢做到這一點:

OPTIONAL MATCH (a:A)-[*]->(b:B)
WITH a,b, collect(b) as bc
WITH a,b,COLLECT(bc) AS coll
UNWIND coll as unwinded
WITH a,b,unwinded
WHERE ALL (x IN unwinded WHERE x.prop = true)
return a

但是如果他們的prop=true至少具有1 b,它將返回我A。 我究竟做錯了什么?

謝謝!

這應該返回所有沒有連接的B節點的A節點,並帶有錯誤的prop

MATCH (a:A)
OPTIONAL MATCH (a)-[*]->(b:B { prop: false })
WITH a, COLLECT(b) AS bs
WHERE SIZE(bs)= 0
RETURN a;

這是顯示此查詢的控制台

[更新]

如@InverseFalcon所建議,可以大大簡化上述查詢:

MATCH (a:A)
WHERE NOT (a)-[*]->(:B {prop:false})
RETURN a;

這樣行嗎?

MATCH (a:A)
OPTIONAL MATCH (a)-[*]->(b:B {prop: false})
WITH a, b
WHERE b IS NULL
RETURN a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM