Если был сделан простой запрос для пути между двумя узлами, скажем,
MATCH (m{name:'m'}), (n{name:'n'}),
path = (m)-[:SOME_EDGE*]->(n)
RETURN path
EDIT:
(example result)
...
segments: [
{
start: {
id: 1
labels: [lbl1, lbl2, ...],
properties: [p1, p2, ...]
}
end: { ... }
properties: { ... }
},
{
start: {
id: 1
labels: [lbl1, lbl2, ...] <--- duplicate
properties: [p1, p2, ...] <--- duplicate
}
},
...
]
, то сгенерированный результат снова и снова содержит множество дубликатов свойств / типов / идентификаторов одинаковых узлов / ребер, и этостановится хуже, когда в путях есть циклы.
Я гуглил и обнаружил, что могу использовать проекции типа
return [node in nodes(path) | id(node)] as pathNodes,
[r in relationships(path) | id: id(r), type: type(r)] as rels
(Example result)
{
pathNodes: [1,2,3],
rels: {id:101,type:'SOME_EDGE'},{id:102,type:'SOME_EDGE'}
},
{
pathNodes: [1,2,1,3],
rels: ...
}, ...
Но как добавить информацию об узлах / отношениях (только один раз для одной сущности)к приведенному выше результату?
Есть ли способ сделать это в одном запросе?