Как искать все узлы и отношения, связанные с конкретным верхним узлом в neo4j

Я начал использовать neo4j, и у меня есть несколько версий графика в моей базе данных neo4j (единственное, что изменяется, это временная метка на верхнем узле).

Мне было интересно, как получить только отношения к этому одному узлу. В настоящее время я использую это:

"START n=node(*) MATCH (n)-[r]->(m) RETURN n,r,m;"

Но это только показывает все из них. Я знаю, что должен изменить узел n= (*), но я не знаю на что. (название верхнего узла: Info), так что может быть что-то вроде

"START n=node(i:Info{timeStamp:'20/04/2018'}) MATCH (n)-[r]->(m) RETURN n,r,m;"

но это только дало бы мне отношения к этому одному узлу... и мне нужен весь граф

1 ответ

Решение

Сделай это:

MATCH (n:Info)-[r]->(m)
WHERE n.timeStamp = '20/04/2018'
RETURN n, r, m;

Для более быстрого доступа к верхнему узлу вы также должны создать индекс :Info(timeStamp):

CREATE INDEX ON :Info(timeStamp);

[ОБНОВЛЕНО]

Чтобы также получить все отношения и узлы до глубины 2, вы можете сделать это:

MATCH (n:Info)-[r1]->(m1)-[r2]->(m2)
WHERE n.timeStamp = '20/04/2018'
RETURN n, r1, m1, r2, m2;

Чтобы получить все отношения и узлы до произвольной глубины (скажем, 5), вы можете сделать это (каждый возвращается path будет одним из подходящих путей из n на дочерний узел):

MATCH path=(n:Info)-[r*..5]->(m)
WHERE n.timeStamp = '20/04/2018'
RETURN path;

Вы также можете просто использовать [r*] для неограниченного поиска переменной длины, но это может привести к тому, что серверу не хватит памяти или потребуется очень много времени для завершения.

Другие вопросы по тегам