在Neo4j中找到DAG的根

时间:2015-02-13 10:00:11

标签: neo4j

我在Neo4j中有一个DAG,想要找到根节点。

我试过了:

match (r) where not ()-[:HAS_CHILD]->(r) return r

即。所有不属于另一个节点的子节点。然而,这返回了数千个结果;这是只有一个根的DAG!

我拿了一个返回的节点并查看了它的邻居。它有父母和孩子,所以我的查询是错误的。但我无法发现在哪里或为何。

我使用的是beta neo4j-community-2.2.0-M03,因此无法排除错误。然而,所有这些都是通过Neo4j控制台。

非常感谢你的帮助 - 克里斯托弗

1 个答案:

答案 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