2015-06-26 7 views
4

Это очень простой вопрос, но впервые прочитав through the docs, я не могу понять, как построить этот запрос. Скажем, у меня есть график, который выглядит следующим образом:Простой рекурсивный запрос CYPHER

enter image description here

и дополнительно каждый человек имеет возраст, связанный с ними. Какой запрос CYPHER предоставит мне список возраста Джона и всех возрастов всего дерева древа Джона?

То, что я пытался до сих пор:

MATCH (start)-[:friend]>(others) 
WHERE start.name="John" 
RETURN start.age, others.age 

Это имеет несколько проблем,

  1. Это только идет один один один друг глубоко, и я хотел бы перейти к всех друзья Джона.

  2. Он не возвращает список, а ряд (john.age, other.age).

ответ

14

Так что вам нужен не только друг Джона, но и друзья друзей. Поэтому вам нужно сказать neo4j рекурсивно углубиться в график.

Этот вопрос занял 2 уровня.

MATCH (john:Person { name:"John" })-[:friend *1..2]->(friend: Person) 
RETURN friend.name, friend.age; 

Ехать n Невель глубоко, ничего не ставить т.е. *1..

Ой, и я также нашел nice example в Neo4j

Так что же *1..2 здесь означает:

* к обозначают его рекурсию.

1 чтобы обозначить, что не включать сам john, т. Е. Является начальным узлом. Если вы положите 0 здесь, он также будет включать в себя сам John node.

.., чтобы обозначить, что идут от этого узла до ...

2 обозначает уровень рекурсии. Здесь вы говорите, чтобы остановиться на уровне 2. i.e не выходить за пределы steve. Если вы ничего не поместите там, он будет продолжать идти, пока он не может найти узел, который «имеет» друга отношения

документации для этих типов соответствия запроса является here и аналогичный ответ here.

+0

Да, это займет вас всю дорогу. Так что если у Steve был друг x, а x имел друга y, все зайдет. – Rash

+0

Спасибо за пример @Rash, это пройдет долгий путь! Я просто понял, начинаю ли я на '0' вместо' 1', я тоже получаю исходный узел. – Hooked

+0

@Hooked Спасибо. но проклинать документацию. Я пытаюсь найти определения, но я не могу их найти. Все, что я написал, это то, что я помню. – Rash

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