【问题标题】:How to Exclude nodes from Path in Cypher?如何从 Cypher 的路径中排除节点?
【发布时间】:2021-09-16 16:55:17
【问题描述】:

我一直在编写一个 Cypher 查询,该查询可以让我找到其代码未包含在给定列表中的所有节点。我尝试在路径中搜索模式否定、节点否定、排除但没有成功。

假设我有一个代码列表(即使这个列表有 1 个元素):["1V2ZG"]

我想构建一个 Cypher 查询,该查询将返回不在上述列表中的 ARNOG 节点的每个子节点。

这是起始图:

我想要的图形响应:

我正在使用的查询返回所有不是我想要的节点:

MATCH 
(excl:Client)<-[:PARENT_OF*]-(n:Client:Group),
path=(b:BaseHierarchy)-[:INCLUDES]->(n)-[:PARENT_OF*]->(inc:Client) 

WHERE excl.code IN ['1V2ZG']  AND n.code = 'ARNOG' 
WITH b,
nodes(path) as nodes, relationships(path) as relationships 
RETURN b,
apoc.coll.toSet(apoc.coll.flatten(collect(relationships))) as relationships,
apoc.coll.toSet(apoc.coll.flatten(collect(nodes))) as nodes;

【问题讨论】:

    标签: java graph neo4j cypher


    【解决方案1】:

    怎么样:

    MATCH path=(b:BaseHierarchy)-[:INCLUDES]->(n)-[:PARENT_OF*]->(inc:Client) 
    WHERE n.code = 'ARNOG' AND 
          NONE(node IN nodes(path) WHERE node.code IN ['1V2ZG'])
    WITH b, nodes(path) AS nodes, relationships(path) AS relationships 
    RETURN b,
           apoc.coll.toSet(apoc.coll.flatten(collect(relationships))) as relationships,
           apoc.coll.toSet(apoc.coll.flatten(collect(nodes))) as nodes;
    

    ?

    【讨论】:

      猜你喜欢
      • 2023-01-28
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多