Neo4j中如何查询所有根节点到下游各节点的对应关联关系
Neo4j查询所有根节点与下游节点对应关系方案
直接查询语句
如果已经用你提供的语句完成数据加载,直接执行以下Cypher即可得到预期结果:
MATCH (root) WHERE NOT EXISTS { (root)<-[:FEEDs_INTO]-() } MATCH (root)-[:FEEDs_INTO*1..]->(descendant) RETURN root.id + "," + descendant.id AS line ORDER BY line
逻辑说明
- 第一个匹配条件筛选出所有没有入边的根节点,也就是你提到的无上游的节点
- 第二个匹配条件匹配根节点出发、沿
FEEDs_INTO关系走1步及以上可达的所有下游节点 - 如果某个下游节点关联多个根节点,该查询会自动返回所有对应的根节点-下游节点组合,符合多根节点场景
- 最终返回拼接好的逗号分隔内容,排序后和你给出的预期输出完全一致
优化建议
你原有的数据加载语句会给同一个节点打上不同的标签,比如节点B既是src(作为C的上游)又是dst(作为A的下游),如果不需要区分导入时的源/目标角色,建议修改加载语句为统一标签,避免后续查询歧义:
LOAD CSV WITH HEADERS FROM 'file:///data.csv' AS line MERGE (s:Node {id: line.source}) MERGE (d:Node {id: line.child}) // 用MERGE代替CREATE避免重复导入生成重复关系 MERGE (s)-[:FEEDs_INTO]->(d)
内容的提问来源于stack exchange,提问作者neekitit
相关产品推荐
相关产品推荐

