У меня есть следующий код для инициализации базы данных
create
(C1: Company{name:'Company A'}),
(C2: Company{name:'Company B'}),
(C3: Company{name:'Company C'}),
(C4: Company{name:'Company D'}),
(C1)-[:Sell{contract:"TA1801"}]->(C2),
(C2)-[:Sell{contract:"TA1802"}]->(C3),
(C3)-[:Sell{contract:"TA1803"}]->(C1),
(C3)-[:Sell{contract:"TA1804"}]->(C4),
(C1)-[:Sell{contract:"TA1805"}]->(C4),
(C4)-[:Sell{contract:"TA1806"}]->(C1)
Допустим, я хотел бы найти только уникальный путь для «Компании А»
MATCH path = (start:Company{name:"Company A"})-[r:Sell*]->(end:Company{name:"Company A"})
RETURN path
Возвращает пять путей
╒══════════════════════════════════════════════════════════════════════╕
│"path" │
╞══════════════════════════════════════════════════════════════════════╡
│[{"name":"Company A"},{"contract":"TA1805"},{"name":"Company D"},{"nam│
│e":"Company D"},{"contract":"TA1806"},{"name":"Company A"}] │
├──────────────────────────────────────────────────────────────────────┤
│[{"name":"Company A"},{"contract":"TA1805"},{"name":"Company D"},{"nam│
│e":"Company D"},{"contract":"TA1806"},{"name":"Company A"},{"name":"Co│
│mpany A"},{"contract":"TA1801"},{"name":"Company B"},{"name":"Company │
│B"},{"contract":"TA1802"},{"name":"Company C"},{"name":"Company C"},{"│
│contract":"TA1803"},{"name":"Company A"}] │
├──────────────────────────────────────────────────────────────────────┤
│[{"name":"Company A"},{"contract":"TA1801"},{"name":"Company B"},{"nam│
│e":"Company B"},{"contract":"TA1802"},{"name":"Company C"},{"name":"Co│
│mpany C"},{"contract":"TA1803"},{"name":"Company A"}] │
├──────────────────────────────────────────────────────────────────────┤
│[{"name":"Company A"},{"contract":"TA1801"},{"name":"Company B"},{"nam│
│e":"Company B"},{"contract":"TA1802"},{"name":"Company C"},{"name":"Co│
│mpany C"},{"contract":"TA1803"},{"name":"Company A"},{"name":"Company │
│A"},{"contract":"TA1805"},{"name":"Company D"},{"name":"Company D"},{"│
│contract":"TA1806"},{"name":"Company A"}] │
├──────────────────────────────────────────────────────────────────────┤
│[{"name":"Company A"},{"contract":"TA1801"},{"name":"Company B"},{"nam│
│e":"Company B"},{"contract":"TA1802"},{"name":"Company C"},{"name":"Co│
│mpany C"},{"contract":"TA1804"},{"name":"Company D"},{"name":"Company │
│D"},{"contract":"TA1806"},{"name":"Company A"}] │
└──────────────────────────────────────────────────────────────────────┘
Однако вы можете видеть, что отношение продажи с контрактом TA1806, TA1801, TA1802 повторяется более одного раза.Конкретным примером будет TA1806, появившийся на маршрутах 1,2,4 и 5. TA1801 появился на маршруте 2,3,4,5
Что я надеюсь, что путь содержит только уникальные отношения с кратчайшим путем (изначальноя хотел дольше, но похоже, что сложность увеличивается очень много)
╒══════════════════════════════════════════════════════════════════════╕
│"path" │
╞══════════════════════════════════════════════════════════════════════╡
│[{"name":"Company A"},{"contract":"TA1805"},{"name":"Company D"},{"nam│
│e":"Company D"},{"contract":"TA1806"},{"name":"Company A"}] │
├──────────────────────────────────────────────────────────────────────┤┤
│[{"name":"Company A"},{"contract":"TA1801"},{"name":"Company B"},{"nam│
│e":"Company B"},{"contract":"TA1802"},{"name":"Company C"},{"name":"Co│
│mpany C"},{"contract":"TA1803"},{"name":"Company A"}] │
├──────────────────────────────────────────────────────────────────────┤