1

我是 cypher 的初学者,想创建一个查询来查找连接到其他节点连接到它们的特定节点的所有节点, 请参阅示例

我需要获取连接到蓝色节点连接到它的红色节点的所有棕色节点。

对于此示例,我想获取棕色节点 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 个查询中完成吗?感谢!

4

1 回答 1

0

改进的答案:从 :B 节点开始并检查它们的所有 :A 邻居是否都有指向 :R 的链接,ALL()如果 :B 没有任何邻居,该函数也返回 true

MATCH (b:B)
WHERE ALL(n IN [(b)--(a:A) | a] WHERE EXISTS ((n)--(:R))  ) 
RETURN b

在此处输入图像描述

于 2021-12-07T10:15:33.803 回答