我目前无法让WHERE NOT ... IN ...工作。我希望获得邻居节点的列表,这些邻居与子节点具有这种“池”关系,而不包括任何原始子节点。目前,如果我使用下面的命令,返回的邻居列表将包含子节点。
MATCH (parent)-[r:Contains]-(children) WHERE parent.display_name='xyz'
WITH parent, r, children, collect(children) as child_list
OPTIONAL MATCH (children)-[:Pool]->(pool)<-[:Pool]-(neighbours)
WHERE NOT neighbours IN child_list
RETURN child_list, collect(DISTINCT neighbours)
一种替代方法是,仅排除也与父级直接相关的邻居。但是,这也将邻居作为包含孩子的列表返回,似乎忽略了[r]关系。尽管如果我不做(邻居)-(父母),这将排除孩子,但以不[r](即我正在查看的当前关系)的关系为代价。
MATCH (parent)-[r:Contains]-(children) WHERE parent.display_name='xyz'
WITH parent, r, children, collect(children) as child_list
OPTIONAL MATCH (children)-[:Pool]->(pool)<-[:Pool]-(neighbours)
WHERE NOT (neighbours)-[r]-(parent)
RETURN child_list, collect(DISTINCT neighbours)
如果有人可以看一看这两个选项,并且可以帮助我了解自己在做什么错,我将不胜感激。
谢谢,尼克
我目前无法让WHERE NOT ... IN ...工作。我希望获得邻居节点的列表,这些邻居与子节点具有这种“池”关系,但不包括任何...
在您的查询中,我认为聚合的功能与您期望的不同。
这将返回父项xyz
的子项列表,以及与那些子项处于相同“池”的邻居的列表。