2015-08-29 2 views
2

У меня есть график Neo, что если я выберу определенные отношения, это дерево.Запрос Neo4j Cypher, который возвращает узлы вдоль сколь угодно длинного пути

Я хотел бы начать с произвольного узла и найти все узлы до корня. Я хочу вернуть мне все узлы между ними, включая концы. Мне нужны узлы в порядке, в случае примера, «a, t, c, d, e, ROOT».

Представьте себе дерево имеет филиал, который выглядит как

a-[]->t-[]->c-[]->d-[]->e-[]->ROOT 

Если отношения я забочусь о являются х, у и г, и если корневой узел называется ROOT, а начальный узел имеет определенный идентификатор (уникальное значение), я получаю что-то вроде этого:

(a {id:an_id})-[*:x|y|z]->(root:ROOT) return a, root 

это возвращает меня концы, но как я могу также получить узлы между ними?

редактировать

узлы (...) http://neo4j.com/docs/stable/query-functions-collection.html#functions-nodes

+0

кстати. это Cypher с 'y' :) –

ответ

3

Вы получили это почти сразу:

Вы должны присвоить выражение пути, .e.g. p.

MATCH p= (a:Leaf {id:an_id})-[:x|:y|:z*]->(root:ROOT) 
RETURN p,a,root, nodes(path); 

это может быть более эффективно использовать shortestPath

MATCH p= shortestPath((a:Leaf {id:an_id})-[:x|:y|:z*]->(root:ROOT)) 
RETURN p,a,root, nodes(p); 
+0

Спасибо, я перееду на палубу, запустил рабочую машину и прочитал документы« путь ». У вас есть круглые скобки вокруг вашего второго примера, но не первого. Это имеет значение? И в первом примере, откуда берется «путь»? –

+0

Это сделало трюк и плавно. –

+1

скобки принадлежат функции shorestPath. –

Смежные вопросы