如何使用neo4j在树中找到根父母?

时间:2014-10-06 16:57:38

标签: neo4j cypher

我有一棵树,我想在每个级别获得所有节点。树的深度可以是任何东西。

node(1)<-[PARENT]-node(2)<-[PARENT]-node(3)<-[PARENT]-node(4)
node(1)<-[PARENT]-node(5)<-[PARENT]-node(6)
node(2)<-[PARENT]-node(7)
node(5)<-[PARENT]-node(8)
node(2)<-[PARENT]-node(9)

如何找到根父母? (没有父母的节点)请解释密码查询

2 个答案:

答案 0 :(得分:0)

以下内容将返回所有没有传出PARENT关系的节点。 *0语法意味着您需要0个PARENT关系(在这种情况下是传出的)。

这甚至可以匹配一个孤立的节点。但是,请注意,这也将匹配树中不存在的所有节点(如果您有任何这些节点)。

MATCH ()<-[:PARENT*0]-(p)
RETURN p;

如果你还有非树节点,你应该给所有树节点一个标签,比如Tnode,在这种情况下查询将是:

MATCH ()<-[:PARENT*0]-(p:Tnode)
RETURN p;

答案 1 :(得分:0)

我会这样:

MATCH (root)-[:PARENT]->()

WHERE NOT exists( ()-[:PARENT]->(root) )

RETURN root

如果要允许隔离节点,请执行以下操作:

MATCH (root)-[:PARENT*0..1]->()

WHERE NOT exists( ()-[:PARENT]->(root) )

RETURN root

或更简单:

MATCH (root)

WHERE NOT exists( ()-[:PARENT]->(root) )

RETURN root

但是如果您有其他关系类型,这可能会犯规。