作为我当前Neo4j Cypher查询的结果,我有以下带有节点的行:
WITH node, rootNode, resultNode
现在,我需要将这个结构转换为以下结构:
GROUP BY resultNode
(因为resultNode
可能重复)对于每个
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 构建这样一个查询
你可以试试这个:
- 对于每个
resultNode
,在列表中收集node
和rootNode
- 合并
node
和rootNode
的列表 - 从最终列表中,筛选出与
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
子句中的条件。