如何在Neo4j Cypher中排除一些路径

时间:2015-12-11 04:39:47

标签: collections path neo4j cypher nodes

我有两套路径

Collection 1

  1. A-> B-> C-> D
  2. A-> E-> F-> D
  3. A-> G-> J-> H
  4. I-> B-> C-> d
  5. 收集2

    1. E-> D
    2. I-> d
    3. Cypher查询输出应该是Collection 1的路径,其中第二个集合的节点组合不存在。 在上面的例子中,Collection 2的节点E,D,第1个元素存在于Collection 1的第2个路径中,所以第2个应该被删除。类似地,集合2的节点I,D,第2个元素存在于集合1的第4个路径中,因此第4个元素也应该被删除。

      然后输出应该是 收集3

      1. A-> B-> C-> d
      2. A-> G-> J-> H
      3. 通过Cypher,我能够找到集合1的路径,其中存在集合2路径的节点,但我无法做出“减去”#39;收藏中的操作。

        如何获得cypher查询以实现上述目标?

        提前致谢

        Rasyq

1 个答案:

答案 0 :(得分:0)

如果没有您的Cypher查询,就不容易回答。但通常,您可以从nodes(your_path)的路径获取节点,并检查所有这些节点是否包含在具有all()谓词的另一个路径中。

MATCH p1 = (your first paths), p2 = (the paths you check against)
// filter paths where NOT all nodes of p2 are in p1
WHERE NOT all(node2 IN nodes(p2) WHERE node2 IN p1)
RETURN p1