Neo4j apoc.convert.toTree未显示具有唯一关系的重复子级

93ze6v8z  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(134)

我有两个节点A和B(A-〉B)通过两个关系连接。这两个关系是唯一的。例如,您可以将两个rel视为在两个不同时间从A到B的两条路径。此时将它们转换为一个关系是不可行的。

为了在界面中显示,查询结果应该是树结构。使用以下查询获得树

MATCH p=(n:Label1 {name:'main'})-[:calls*..2]->(m)
WITH COLLECT(p) AS ps 
CALL apoc.convert.toTree(ps) yield value
RETURN value;

生成的树为

优选结果为

如果两个节点之间存在多个关系,如何得到一个具有重复子节点的树?
谢谢。

wlwcrazw

wlwcrazw1#

我提供了一个解决这个问题的方法。虽然它不完全是作为apoc函数的结果嵌套文档,但我认为它可以服务于您的目的。

MATCH p=(n:Label1 {name:'main'})-[:calls*..2]->(m)
// each path will be returned
WITH COLLECT(p) AS ps, p, n
CALL apoc.convert.toTree(ps) yield value
// return node n and it's relationships as a nested document
RETURN {_id: ID(n), _type: labels(n), node:n, relationships: collect(value['calls'][0])} as result

样品结果:

[
  {
    "result": {
      "_id": 31,
      "_type": [
        "Label1"
      ], 
      "node": {
        "name": "main"
      },
      "relationships": [
        {
          "calls.y": "prop y",
          "_type": "Main",
          "_id": 32
        },
        {
          "_type": "Main",
          "_id": 32,
          "calls.x": "prop x"
        }
      ]
    }
  }
]

相关问题