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