Cypher: получить список связанных узлов из списка узлов - PullRequest
0 голосов
/ 04 июля 2018

У меня есть модель как:

введите описание изображения здесь (подстанции синим цветом, установки желтым цветом)

Я сопоставляю пути от определенных подстанций до определенных подстанций.

Match (s1:Substation) - [] - (:installation) - [ :feeds1..40 ] - (:installation) - (s2:Substation)

Это приведет к путям, существующим на начальной подстанции, 1 или более установках, а затем на закрытой подстанции (и, конечно, между ними будет множество версий) Но на выходе я хочу видеть только все подключенные подстанции. Как я могу получить это, если только пути находятся в моем пути ???

Я пробовал что-то вроде:

with p, filter ( x IN nodes(p) where "ms_installatie" in LABELS(x) ) as installaties,

Но здесь нет хороших ответов.

В конце я хочу получить CSV-вывод всех подстанций «на пути» (а не «в», это было бы просто!)

Любые предложения приветствуются.

Упрощенный вывод предложенного запроса:

[[
{"naam":"TILBURG NOORD","nummer":"TBN"},
{"naam":"QUIRIJNSTOK","nummer":"152.6870"},
{"naam":"BP NOORD-OOST TANGEND","nummer":"152.6258"},
{"naam":"VERELST BV""nummer":"152.2020"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"},
{"naam":"TILBURG NOORD","nummer":"TBN"},
{"naam":"QUIRIJNSTOK","nummer":"152.6870"},
{"naam":"BP NOORD-OOST TANGEND","nummer":"152.6258"},
{"naam":"VERELST BV","nummer":"152.2020"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"},
{"naam":"TILBURG NOORD","nummer":"TBN"},
{"naam":"QUIRIJNSTOK","nummer":"152.6870"},
{"naam":"BP NOORD-OOST TANGEND","nummer":"152.6258"},
{"naam":"VERELST BV","nummer":"152.2020"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"}
]]

На самом деле это 3 пути (показаны при возврате пути (p), см. введите описание изображения здесь ). Выходной я хочу:

[[
{"naam":"TILBURG NOORD","nummer":"TBN"},
{"naam":"QUIRIJNSTOK","nummer":"152.6870"},
{"naam":"BP NOORD-OOST TANGEND","nummer":"152.6258"},
{"naam":"VERELST BV""nummer":"152.2020"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"}
][
{"naam":"TILBURG NOORD","nummer":"TBN"},
{"naam":"QUIRIJNSTOK","nummer":"152.6870"},
{"naam":"BP NOORD-OOST TANGEND","nummer":"152.6258"},
{"naam":"VERELST BV","nummer":"152.2020"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"}
][
{"naam":"TILBURG NOORD","nummer":"TBN"},
{"naam":"QUIRIJNSTOK","nummer":"152.6870"},
{"naam":"BP NOORD-OOST TANGEND","nummer":"152.6258"},
{"naam":"VERELST BV","nummer":"152.2020"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"},
{"naam":"L.O.A. A1","nummer":"152.1200A1"}
]]

Удвоение / утроение последней станции является правильным, потому что эта станция имеет 3 установки, которые питают друг друга.

Thx.

1 Ответ

0 голосов
/ 04 июля 2018

Я не уверен на 100% в этом запросе (я не могу проверить его на ваших данных), но он должен быть довольно близок:

MATCH p=(s1:Substation)-->(:installation)-[:feeds*..40 ]-(:installation)<--(s2:Substation)
WITH s1 AS start, s2 AS end, filter(x IN NODES(p) WHERE "ms_installatie" in LABELS(x) ) as installaties
 UNWIND installaties as node
   MATCH (node)<--(ss:Substation)
   WITH start, end, collect(ss) AS ss_on_path
   RETURN [] + start + ss_on_path + end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...