Neo4j Cypher GROUP BY,并根据条件创建一个集合



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

WITH node, rootNode, resultNode

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

  1. GROUP BY resultNode(因为resultNode可能重复)

  2. 对于每个resultNode组,我需要通过以下公式创建一个包含节点的集合:

    node添加到集合if node NOT EQUAL resultNode

    rootNode添加到集合if rootNode NOT EQUAL resultNode

因此,我需要这样的东西:

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

请帮助用Cypher 构建这样一个查询

你可以试试这个:

  1. 对于每个resultNode,在列表中收集noderootNode
  2. 合并noderootNode的列表
  3. 从最终列表中,筛选出与resultNode匹配的所有节点

像这样:

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子句中的条件。