提问者:小点点

Neo4j Cypher GROUP BY并按条件创建集合


作为我当前Neo4j Cypher查询的结果,我有以下具有节点的行:

WITH node, rootNode, resultNode

现在,我需要将这个结构转换为以下内容:

>

  • GROUP BY结果节点(因为结果节点可能是重复的)

    对于每个结果节点组,我需要创建一个集合,该集合将包含以下公式的节点:

    node添加到集合中,如果node NOT EQUAL结果Node

    如果rootNode不是EQUAL结果Node,则将rootNode添加到集合

    所以,作为结果,我需要这样的东西:

    resultNode1, {node1, node2, ..., rootNode1, rootNode2...}
    resultNode2, {node2...}
    resultNode3, {}
    resultNodeN, {nodeN..., rootNodeN}
    ...
    

    请帮助使用Cypher构建这样的查询


  • 共1个答案

    匿名用户

    你可以试试这个:

    1. 对于每个结果节点,将节点rootNode收集在一个列表中。
    2. 组合noderootNode的列表。
    3. 从最终列表中,过滤掉所有与结果节点匹配的节点。

    像这样:

    WITH resultNode, COLLECT(node) AS nodes, COLLECT(rootNode) AS rootNodes
    WITH resultNode, apoc.coll.unionAll(nodes, rootNodes) AS allNodes
    RETURN resultNode, [x IN allNodes WHERE x <> resultNode | x ] AS result
    

    相应地更新WHERE子句中的条件。