在 Neo4j 中查找 DAG 的根
Finding the root of a DAG in Neo4j
我在 Neo4j 中有一个 DAG,想找到根节点。
我试过这个:
MATCH (r) WHERE NOT ()-[:HAS_CHILD]->(r) RETURN r
即不是另一个节点的 child 的所有节点。然而,这返回了几千个结果;这是一个只有一个根的DAG!
我拿了一个返回的节点并查看了它的邻域。它有 parents 和 children 所以我的查询是错误的。但我找不到位置或原因。
我使用的是测试版 neo4j-community-2.2.0-M03,因此不能排除错误。然而,所有这些都是通过 Neo4j 控制台进行的。
非常感谢您的帮助 - 克里斯托弗
我认为你非常接近于找到没有内向关系的节点。您只需要将 not
放在括号中的 where 子句中。
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
我在 Neo4j 中有一个 DAG,想找到根节点。
我试过这个:
MATCH (r) WHERE NOT ()-[:HAS_CHILD]->(r) RETURN r
即不是另一个节点的 child 的所有节点。然而,这返回了几千个结果;这是一个只有一个根的DAG!
我拿了一个返回的节点并查看了它的邻域。它有 parents 和 children 所以我的查询是错误的。但我找不到位置或原因。
我使用的是测试版 neo4j-community-2.2.0-M03,因此不能排除错误。然而,所有这些都是通过 Neo4j 控制台进行的。
非常感谢您的帮助 - 克里斯托弗
我认为你非常接近于找到没有内向关系的节点。您只需要将 not
放在括号中的 where 子句中。
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