如何从Neo4J中提取图形并在编程语言中重建它

如何从Neo4J中提取图形并在编程语言中重建它,neo4j,cypher,Neo4j,Cypher,假设我在Neo4J中有一组连接的节点,形成一棵树或一个图或其他什么,我想用我正在使用的编程语言(我正在使用Java,但这并不重要) 我知道我可以通过一个简单的密码查询将它们全部保存下来,如下所示: MATCH (n0:Root)-[:Child*0..]->(nx:Node) WHERE ID(n0) = 1 RETURN nx; MATCH (n0:Root:Node)-[:Child*0..]->(n1:Node)-[:Child]->(n2:Node) RETURN n

假设我在Neo4J中有一组连接的节点,形成一棵树或一个图或其他什么,我想用我正在使用的编程语言(我正在使用Java,但这并不重要)

我知道我可以通过一个简单的密码查询将它们全部保存下来,如下所示:

MATCH (n0:Root)-[:Child*0..]->(nx:Node) WHERE ID(n0) = 1 RETURN nx;
MATCH (n0:Root:Node)-[:Child*0..]->(n1:Node)-[:Child]->(n2:Node)
RETURN n1, n2;
但我这里的问题是,一旦回到Java,我不知道哪个节点连接到哪个节点!如何返回数据,以便用编程语言重建图形


我可以看到Neo4J web界面正在这样做,但我不知道怎么做

在查询中,您只返回:节点,而不返回任何关系信息或:根节点

一个例子是返回节点的ID和它们之间的关系类型

MATCH (s)-[r]->(t)
RETURN id(s) as source,id(r) as target,type(r) as relationship_type
您可以根据要导出的内容修改此查询

整个想法是成对返回节点
(源)->(目标)
。如果只想导出连接到标记为:Root的特定起始节点的特定子图,可以按如下方式返回该图:

MATCH (n0:Root)-[:Child*0..]->(nx:Node) WHERE ID(n0) = 1 RETURN nx;
MATCH (n0:Root:Node)-[:Child*0..]->(n1:Node)-[:Child]->(n2:Node)
RETURN n1, n2;

在查询中,只返回:节点,而不返回任何关系信息或:根节点

一个例子是返回节点的ID和它们之间的关系类型

MATCH (s)-[r]->(t)
RETURN id(s) as source,id(r) as target,type(r) as relationship_type
您可以根据要导出的内容修改此查询

整个想法是成对返回节点
(源)->(目标)
。如果只想导出连接到标记为:Root的特定起始节点的特定子图,可以按如下方式返回该图:

MATCH (n0:Root)-[:Child*0..]->(nx:Node) WHERE ID(n0) = 1 RETURN nx;
MATCH (n0:Root:Node)-[:Child*0..]->(n1:Node)-[:Child]->(n2:Node)
RETURN n1, n2;

另一种选择是,如果您有权访问,则可以利用,这将为您提供子图中所有节点的列表,以及子图中节点之间的所有关系

MATCH (n0:Root)
CALL apoc.path.subgraphAll(n0,{relationshipFilter:'Child>'}) YIELD nodes, relationships
...

另一种选择是,如果您有权访问,则可以利用,这将为您提供子图中所有节点的列表,以及子图中节点之间的所有关系

MATCH (n0:Root)
CALL apoc.path.subgraphAll(n0,{relationshipFilter:'Child>'}) YIELD nodes, relationships
...

谢谢,但那不行。因为无法判断哪两个节点是连接的。也请考虑我不知道图有多深,因此<代码> * 0…<代码>部分关系选择器。源和目标总是与指向目标的关系连接。因为我在查询中不使用任何标签或关系类型,所以它会遍历整个数据库并匹配库中的每个关系。如果您允许,我将编辑您的帖子以包含我要查找的内容,然后再接受它。我稍微更改了您的查询,这是一个更好的不获取根节点的方法这是故意的:)谢谢,但那不起作用。因为无法判断哪两个节点是连接的。也请考虑我不知道图有多深,因此<代码> * 0…<代码>部分关系选择器。源和目标总是与指向目标的关系连接。因为我在查询中不使用任何标签或关系类型,所以它会遍历整个数据库并匹配库中的每个关系。如果您允许,我将编辑您的帖子以包含我要查找的内容,然后再接受它。我稍微更改了您的查询,哪一种更好的方法不获取根节点是故意的:)