Первый раз спрашиваем о SO и newby cypher и neo4j.Возврат всех узлов и связей между узлами по пути
Мне нужно получить все узлы и все их отношения, которые составляют линию определенного узла; для отображения их в ориентированном графе мне нужен список nodes
и список отношений (links
). Это мой манекен set of nodes, и это то, что я хочу, чтобы получить (узлы плюс ссылки): result
Это то, что я пришел после нескольких часов исследований и попыток:
MATCH lineage = (n:Sample {name:"P"})-[:CHILD_OF*]->(parent:Sample)
MATCH (parent)-[r_out]->(child)-[r_in]->(parent)
WHERE parent IN nodes(lineage) OR child IN nodes(lineage)
RETURN
collect(DISTINCT parent) AS nodes,
collect({ source: parent.name, rel: type(r_out), target: child.name }) AS links_out,
collect({ source: child.name, rel: type(r_in), target: parent.name }) AS links_in;
(я создал два другой список отношений, поэтому я могу отличить источник и цель.)
Однако это не возвращает n в списке узлов и фактически умножает ссылки, так как я думаю, возвращает все возможные пути между n
и всеми другими узлами ,
Я не мог понять решение, и я также убежден, что это должно быть гораздо более элегантный запрос ...
Любая помощь? Благодаря
Хотя я не понимаю, почему, если я нацелен на узел, у которого нет родительского элемента (поэтому нет исходящих отношений «CHILD_OF»), я не получаю этот узел как единственный элемент в «узлах» 'array? Даже если он не является частью пути 'lineage' (поскольку путь в этом случае фактически не существовал), не определяется ли дочерний элемент' child' каким-либо образом, обладающим свойством 'name = P'? – Stefano