Cypher - 将图形结果转换为列表或 JSON

Cypher - Convert graph result to list or JSON

我有以下 Neo4j 图表结果。


我 我正在使用多重关系 -[RELATED_TO*]- 命令来获取它。

Match(n:Comment)
MATCH(n)-[RELATED_TO*]-(d:Comment)
return n, d;

我想在列表中显示结果,我可以说这个答案来自那个答案,或者在 JSON 级联文件中。实现该目标的最佳方法是什么?

我认为您可以使用 APOC 过程 apoc.convert.toTree return JSON 级联结构。看看这个例子:

创建示例数据集:

CREATE (:Comment {id : 1})<-[:RELATED_TO]-(:Comment {id : 2})<-[:RELATED_TO]-(:Comment {id : 3})<-[:RELATED_TO]-(:Comment {id : 4})

正在查询:

MATCH p = (n:Comment)<-[RELATED_TO*]-(d:Comment)
// I believe you are interested only in the "complete" path.
// That is: you are not interested in the sub path like (:Comment {id : 2})-[:RELATED_TO]->(:Comment {id : 3}).
// So this WHERE clause is used to avoid these sub paths.
WHERE NOT (n)-->() AND NOT (d)<--()
CALL apoc.convert.toTree([p]) yield value
RETURN value

输出:

{
  "_type": "Comment",
  "related_to": [
    {
      "_type": "Comment",
      "related_to": [
        {
          "_type": "Comment",
          "related_to": [
            {
              "_type": "Comment",
              "_id": 142701,
              "id": 4
            }
          ],
          "_id": 142700,
          "id": 3
        }
      ],
      "_id": 142699,
      "id": 2
    }
  ],
  "_id": 142698,
  "id": 1
}

或者,您可以 return 使用 nodes() 函数将路径作为参数传递的节点列表:

MATCH p = (n:Comment)<-[RELATED_TO*]-(d:Comment)
WHERE NOT (n)-->() AND NOT (d)<--()
return nodes(p)

结果将是:

╒═════════════════════════════════════╕
│"nodes(p)"                           │
╞═════════════════════════════════════╡
│[{"id":1},{"id":2},{"id":3},{"id":4}]│
└─────────────────────────────────────┘