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}]│
└─────────────────────────────────────┘
我有以下 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}]│
└─────────────────────────────────────┘