2013-08-16 3 views
0

У меня есть иерархическая структура орга так:Neo4j высчитывать возвращение верхнего узла или запуск узел

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

Я хочу Cypher запроса, который дает мне верхний орг дал какой-либо из узлов идентификаторов:

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

Я могу написать запрос, чтобы вернуть верхний org, когда начальный узел имеет хотя бы один родитель. Но я не могу понять, как вернуть начальный узел, когда нет родительского ссылка в том же запросе:

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

ответ

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