繁体   English   中英

Neo4j Cypher:从结果中排除某些节点

[英]Neo4j Cypher: exclude certain nodes from result

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

查询一:

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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM