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

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

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

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

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

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

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


person Ish Montalvo    schedule 27.07.2018    source источник


Ответы (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*] для неограниченного поиска с переменной длиной, но это может привести к нехватке памяти на сервере или слишком длительному завершению поиска.

person cybersam    schedule 27.07.2018
comment
Большое спасибо! - person Ish Montalvo; 27.07.2018
comment
Большое спасибо! ваш ответ идеально подходит для получения верхнего узла с его отношениями и связанными узлами, но есть ли способ получить узлы и соединения подузлов? - person Ish Montalvo; 27.07.2018