假设我有一个包含类型 A 和 B 的节点的有向图。类型 A 的节点可以连接到类型 A 或 B 的节点,而类型 B 的节点没有传出连接。
此外,节点 B 有一个 boolean
属性。我需要找到所有节点 A:
与节点 B 没有直接或间接连接
如果节点 A 至少连接到 1 个节点 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
但如果他们至少有 1 个 b 且 prop=true
,它就会返回 A。我做错了什么?
谢谢!
最佳答案
这应该返回所有没有连接 B
节点且 prop
为 false 的 A
节点:
MATCH (a:A)
OPTIONAL MATCH (a)-[*]->(b:B { prop: false })
WITH a, COLLECT(b) AS bs
WHERE SIZE(bs)= 0
RETURN a;
这里是a console显示此查询。
[更新]
根据@InverseFalcon的建议,上面的查询可以大大简化:
MATCH (a:A)
WHERE NOT (a)-[*]->(:B {prop:false})
RETURN a;
关于graph - Neo4j:如何查找以下所有节点:连接到具有特定属性的 0 个节点,或连接到具有属性集的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35195651/