使用Neo4j + Cypher查找节点及其连接的子图

Ber*_*ert 5 neo4j graph-databases cypher

我正在使用Neo4j 2.1.7和Node.js来构建REST API.数据 - 大约70.000个节点和100.000个关系 - 包含许多小的连接子图.

例如localhost:8000/search?name=Bussum,一个API调用应返回所有命名Bussum的节点及其所属的连接组件.

插图:

连接组件

(来自维基百科的图片)

我可以通过这样的查询获得我需要的所有数据:

MATCH (a {name: "Bussum" })-[r*]-(b) 
UNWIND rels AS rel 
RETURN distinct startNode(rel) AS a, type(rel), endNode(rel) AS b
Run Code Online (Sandbox Code Playgroud)

但是这样的查询将返回所有三元组(a)-[r]-(b)(不按组件/子图分组).当然,我可以在Node.js中重建图形并自己找到子图,但这根本不是最好的解决方案.是否可以将返回的数据分组到子图/组件的数组/集合中?哪个Cypher查询更符合我的用例?或者我应该考虑使用Neo4j Java API吗?

谢谢!伯特

Mic*_*ger 3

您应该仍然将原始起点作为分组节点。

MATCH (root {name: "Bussum" })-[rels*]-(b) 
UNWIND rels AS rel 
RETURN root, 
       collect({start: startNode(rel), 
                 type:      type(rel), 
                  end:   endNode(rel)}) as component
Run Code Online (Sandbox Code Playgroud)