Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j:获取顶级节点及其子节点_Neo4j - Fatal编程技术网

Neo4j:获取顶级节点及其子节点

Neo4j:获取顶级节点及其子节点,neo4j,Neo4j,我的数据库中总共有10个节点 M1 -> M2 -> M4 -> M5 M1 -> M3 M6 M7 -> M8 M7 -> M9 M7 -> M10 我需要启动一个查询,该查询将返回类似于以下JSON的结果,该JSON可用于显示客户端应用程序中的树结构(无需任何额外处理)(总根级别记录3,但所有子节点根据关系嵌套) Neo4J也有类似的功能(当从Java代码调用这样的查询时,它应该得到嵌套的节点集合)您可以使用from。例如,在以下初始数据中:

我的数据库中总共有10个节点

M1 -> M2 -> M4 -> M5
M1 -> M3 
M6
M7 -> M8 
M7 -> M9
M7 -> M10
我需要启动一个查询,该查询将返回类似于以下JSON的结果,该JSON可用于显示客户端应用程序中的树结构(无需任何额外处理)(总根级别记录3,但所有子节点根据关系嵌套)

Neo4J也有类似的功能(当从Java代码调用这样的查询时,它应该得到嵌套的节点集合)

您可以使用from。例如,在以下初始数据中:

MERGE (M1:TREE {name:'m1'}) MERGE (M2:TREE {name:'m2'})
MERGE (M3:TREE {name:'m3'}) MERGE (M4:TREE {name:'m4'})
MERGE (M5:TREE {name:'m5'}) MERGE (M6:TREE {name:'m6'})
MERGE (M7:TREE {name:'m7'}) MERGE (M8:TREE {name:'m8'})
MERGE (M9:TREE {name:'m9'}) MERGE (M10:TREE {name:'m10'})
MERGE (M1)-[:hasChild]->(M2) MERGE (M2)-[:hasChild]->(M4)
MERGE (M4)-[:hasChild]->(M5) MERGE (M1)-[:hasChild]->(M3)
MERGE (M7)-[:hasChild]->(M8) MERGE (M7)-[:hasChild]->(M9)
MERGE (M7)-[:hasChild]->(M10)
查询可以如下所示:

// Get leaf
MATCH (T:TREE) WHERE NOT (T)-[:hasChild]->(:TREE) WITH T
// Get branches
OPTIONAL MATCH path = (P:TREE)-[:hasChild*0..]->(T) WHERE NOT (P)<-[:hasChild]-()
WITH collect(path) as paths
// Convert paths to tree
CALL apoc.convert.toTree(paths) YIELD value
RETURN value as tree
//获取叶
匹配(T:TREE),其中不匹配(T)-[:hasChild]->(:TREE)与T
//获得分支

可选匹配路径=(P:TREE)-[:hasChild*0..]>(T)其中没有(P)我真的看不出基于某人的第三方解决方案/框架的答案的价值。没问题,请在不使用第三方解决方案的情况下提供您的解决方案。
// Get leaf
MATCH (T:TREE) WHERE NOT (T)-[:hasChild]->(:TREE) WITH T
// Get branches
OPTIONAL MATCH path = (P:TREE)-[:hasChild*0..]->(T) WHERE NOT (P)<-[:hasChild]-()
WITH collect(path) as paths
// Convert paths to tree
CALL apoc.convert.toTree(paths) YIELD value
RETURN value as tree