Neo4j循环:从结果中排除某些节点 [英] Neo4j Cypher: exclude certain nodes from result

查看:47
本文介绍了Neo4j循环:从结果中排除某些节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个查询,分别称为查询A和查询B。我需要的是获取查询A中不在查询B中的所有结果。示例:

查询A:

MATCH (m:MyNode {prop: 'value'}), (n:MyNode {prop: 'value', otherProp: (m).otherProp}
  WHERE m<>n AND shortestPath( (m)-[*]-(n) ) IS NULL
  RETURN m

查询B:

MATCH (m:MyNode)-[:SOME_RELATION]->()<-[:SOME_RELATION]-(n:MyNode {prop: 'value'})
    WHERE m.prop<>'value'
    RETURN n

这两个查询返回我期望的结果,但我真正需要的是查询A返回查询B没有返回的所有内容。

根据我在https://neo4j.com/developer/kb/performing-pattern-negation/找到的内容,我尝试了很多不同的方法,主要是使用WHERE NONE,但我似乎只能删除所有结果,而不只是那些来自查询B的结果。

有什么建议吗?

推荐答案

当然,经过询问,我找到了自己的解决方案。以下是我的想法:

Match (r:MyNode)-[:SOME_RELATION]->()<-[:SOME_RELATION]-(s:MyNode { prop: 'value' })
    WHERE r.prop<>'value'
    WITH COLLECT(s) AS excluded
MATCH (m:MyNode {prop: 'value'}), (n:MyNode {prop: 'value', otherProp: (m).otherProp})
    WITH excluded, COLLECT(m) AS included
RETURN FILTER(n IN included WHERE NOT n IN EXCLUDED)

这对我有效,但如果有人有更高效的解决方案,我当然愿意。

这篇关于Neo4j循环:从结果中排除某些节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆