Преобразование нескольких отношений между двумя узлами в одно с весом

У меня есть следующий график, описывающий совпадение марок автомобилей в документах:

CREATE 
  (`0` :Car {value:"Ford"})
, (`1` :Car {value:"Subaru"})
, (`2` :Car {value:"VW"})
, (`0`)-[:`DOCUMENT` {value:"DOC-1"}]->(`1`)
, (`0`)-[:`DOCUMENT` {value:"DOC-2"}]->(`1`)
, (`1`)-[:`DOCUMENT` {value:"DOC-3"}]->(`2`);

исходный график

Если между двумя узлами много отношений - для визуализации - я хочу заменить его одним и рассчитать вес:

VW ---1--- Subaru ---2--- Ford

Как этого добиться?

Я попробовал следующий запрос:

MATCH (n1)-[r1:DOCUMENT]-(n2)
RETURN n1, n2, apoc.create.vRelationship(n1, 'WEIGHT', {weight:count(r1)}, n2);

но это не ожидаемый результат:

график запроса - неверный результат


person Marek Grzenkowicz    schedule 06.08.2018    source источник


Ответы (1)


Если направление отношения не указано в MATCH (n1)-[r1:DOCUMENT]-(n2) RETURN *;, каждое отношение возвращается дважды:

╒══════════════════╤══════════════════╤═════════════════╕
│"n1"              │"n2"              │"r1"             │
╞══════════════════╪══════════════════╪═════════════════╡
│{"value":"Ford"}  │{"value":"Subaru"}│{"value":"DOC-1"}│
├──────────────────┼──────────────────┼─────────────────┤
│{"value":"Ford"}  │{"value":"Subaru"}│{"value":"DOC-2"}│
├──────────────────┼──────────────────┼─────────────────┤
│{"value":"Subaru"}│{"value":"Ford"}  │{"value":"DOC-1"}│
├──────────────────┼──────────────────┼─────────────────┤
│{"value":"Subaru"}│{"value":"Ford"}  │{"value":"DOC-2"}│
├──────────────────┼──────────────────┼─────────────────┤
│{"value":"Subaru"}│{"value":"VW"}    │{"value":"DOC-3"}│
├──────────────────┼──────────────────┼─────────────────┤
│{"value":"VW"}    │{"value":"Subaru"}│{"value":"DOC-3"}│
└──────────────────┴──────────────────┴─────────────────┘

Укажите направление, изменив предложение MATCH на MATCH (n1)-[r1:DOCUMENT]->(n2) или MATCH (n1)<-[r1:DOCUMENT]-(n2). Остальная часть запроса верна.

person Marek Grzenkowicz    schedule 06.08.2018