CYPHER:无法使用WHERE NOT…IN]从列表中排除节点>

问题描述 投票:0回答:2

我目前无法让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 ...工作。我希望获得邻居节点的列表,这些邻居与子节点具有这种“池”关系,但不包括任何...

neo4j cypher graph-databases
2个回答
0
投票

在您的查询中,我认为聚合的功能与您期望的不同。


0
投票

这将返回父项xyz的子项列表,以及与那些子项处于相同“池”的邻居的列表。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.