我有一棵树,我想在每个级别获得所有节点。树的深度可以是任何东西。
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)
如何找到根父母? (没有父母的节点)请解释密码查询
答案 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
但是如果您有其他关系类型,这可能会犯规。