neo4j cypher返回顶部节点或开始节点

neo4j cypher返回顶部节点或开始节点,neo4j,cypher,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

我的组织结构是这样的:

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

您可以使用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