我在Neo4j中有一个DAG,想要找到根节点。
我试过了:
match (r) where not ()-[:HAS_CHILD]->(r) return r
即。所有不属于另一个节点的子节点。然而,这返回了数千个结果;这是只有一个根的DAG!
我拿了一个返回的节点并查看了它的邻居。它有父母和孩子,所以我的查询是错误的。但我无法发现在哪里或为何。
我使用的是beta neo4j-community-2.2.0-M03,因此无法排除错误。然而,所有这些都是通过Neo4j控制台。
非常感谢你的帮助 - 克里斯托弗
答案 0 :(得分:2)
我认为你非常接近找到没有内在关系的节点。您只需要在括号中的where子句中包含not
。
match r-->()
where not ( ()-[:HAS_CHILD]->r )
return r
更新回答。这是一个带有单个根节点的小型有向无环图。
create (a:Node {name:'A'})
create (b:Node {name:'B'})
create (c:Node {name:'C'})
create (d:Node {name:'D'})
create (e:Node {name:'E'})
create (f:Node {name:'F'})
create (g:Node {name:'G'})
create (h:Node {name:'H'})
create a-[:POINTS]->b
create a-[:POINTS]->c
create c-[:POINTS]->d
create c-[:POINTS]->e
create c-[:POINTS]->f
create f-[:POINTS]->g
create f-[:POINTS]->h
当我使用以下查询查询它时,我只返回一个根。我也在使用社区2.2.0-M03。
match (r:Node)-->()
where not ( ()-->r )
return r