以上图为例 . 使用Cypher,我将如何匹配除最长链和中心节点之外的所有节点?即中心节点正好一跳内的所有节点,同时排除中心节点(除3个节点和2个边缘外的所有节点和边缘) .
我尝试过以下方法:
MATCH (n:Node) WHERE n.id = "123" MATCH path = (m)-[*1..1]->(n) RETURN m
这几乎可以工作,但它仍然返回中心节点(即节点n) . 如何从查询结果中排除此节点?
[更新]
这将返回直接连接到指定节点的所有不同节点,并显式阻止返回指定节点(如果它与自身有关系):
MATCH (n:Node)--(m) WHERE n.id = "123" AND n <> m RETURN DISTINCT m;
理想情况下,我希望匹配我的问题中提到的节点并删除它们 . 但是,由于我还没有找到这样做的方法,可以使用逆方法,其中除了问题中提到的那些节点之外的所有节点都匹配 . 从而有效地排除(但不删除)不需要的节点 .
这可以使用此查询来实现:
MATCH (n:Node) WHERE n.id = "123" MATCH path = (m)-[*2..]->(n) RETURN path
这将返回中心节点以及该节点的所有路径,其长度大于或等于2 .
2 回答
[更新]
这将返回直接连接到指定节点的所有不同节点,并显式阻止返回指定节点(如果它与自身有关系):
理想情况下,我希望匹配我的问题中提到的节点并删除它们 . 但是,由于我还没有找到这样做的方法,可以使用逆方法,其中除了问题中提到的那些节点之外的所有节点都匹配 . 从而有效地排除(但不删除)不需要的节点 .
这可以使用此查询来实现:
这将返回中心节点以及该节点的所有路径,其长度大于或等于2 .