Cypher 查询 - 通过管道结果将 2 个查询组合到另一个
Cypher query - Combine 2 queries by pipe result of one to other
我是 cypher 的初学者,我想创建一个查询来查找连接到其他节点连接到它们的特定节点的所有节点,
see the example
我需要获取所有连接到蓝色节点连接到它的红色节点的棕色节点。
对于这个例子,我想获取棕色节点 ID:2、3 和 1(因为没有红色节点需要获取它)
现在我在 2 个不同的查询中完成了它并使用 python 找到它,但现在我需要在 1 个查询中完成它。
Match (r:R)-[]-(a:A) return collect(a.Id)
和第二个查询:
Match (b:B) Optional Match (b)-[]-(a:A) return b.Id, collect(a.Id)
并在我的脚本中检查第二个查询中的每条记录是否都是连接到 R
的所有 a.Id 的第一个列表的子集
我可以在 1 个查询中完成吗?
谢谢!
改进的答案:
从 :B 节点开始并检查它们的所有 :A 邻居是否有 link 到 :R
如果 :B 没有任何邻居
,ALL()
函数也 returns 为真
MATCH (b:B)
WHERE ALL(n IN [(b)--(a:A) | a] WHERE EXISTS ((n)--(:R)) )
RETURN b
我是 cypher 的初学者,我想创建一个查询来查找连接到其他节点连接到它们的特定节点的所有节点, see the example
我需要获取所有连接到蓝色节点连接到它的红色节点的棕色节点。
对于这个例子,我想获取棕色节点 ID:2、3 和 1(因为没有红色节点需要获取它)
现在我在 2 个不同的查询中完成了它并使用 python 找到它,但现在我需要在 1 个查询中完成它。
Match (r:R)-[]-(a:A) return collect(a.Id)
和第二个查询:
Match (b:B) Optional Match (b)-[]-(a:A) return b.Id, collect(a.Id)
并在我的脚本中检查第二个查询中的每条记录是否都是连接到 R
的所有 a.Id 的第一个列表的子集我可以在 1 个查询中完成吗? 谢谢!
改进的答案: 从 :B 节点开始并检查它们的所有 :A 邻居是否有 link 到 :R 如果 :B 没有任何邻居
,ALL()
函数也 returns 为真
MATCH (b:B)
WHERE ALL(n IN [(b)--(a:A) | a] WHERE EXISTS ((n)--(:R)) )
RETURN b