neo4j cypher返回顶级节点或起始节点

时间:2013-08-16 14:21:35

标签: neo4j cypher

我有这样的分层组织结构:

OrgNode(3)-[HAS_PARENT]->OrgNode(2)-[HAS_PARENT]->OrgNode(1)

我想要一个cypher查询,它给出了给定任何节点ID的顶级组织:

topOrg(3) = OrgNode(1)
topOrg(2) = OrgNode(1)
topOrg(1) = OrgNode(1)

当起始节点至少有一个父节点时,我能够编写查询以返回顶级组织。但是,当同一查询中没有父链接时,我无法弄清楚如何返回起始节点:

start n=node(3)
match (n)-[:PARENT*]->(m)-[r?:PARENT]->()
WHERE r is null
return m

1 个答案:

答案 0 :(得分:1)

您可以使用UNION运算符将结果与处理没有父项的起始节点的另一个查询的结果相结合,

start n=node(3)
match (n)-[:PARENT*]->(m)-[r?:PARENT]->()
WHERE r is null
return m as result
UNION 
Start n=node(3)
Match n 
Where not(n-[:PARENT]-())
Return n as result