У меня возникли проблемы с этим запросом, который я пытаюсь построить.Я просмотрел множество мест в Интернете и, похоже, не смог найти ответ, поэтому я спрашиваю здесь.
, вот как выглядит моя схема.(извините за дерьмовую диаграмму рисования)
Я хочу запрос:
Начиная с одного узла маршрута, я получаю несколько RSи одну OMS от каждого RS
Я хочу найти все узлы Route, которые в конечном итоге подключаются к тем же (или более) узлам OMS
, вот мой текущий запрос:
MATCH (st)--(rs:RS)--(oms:OMS)
WHERE id(st) = 0
with st,rs, oms, collect(oms) as omsn
MATCH (ed:Route)--(rs2:RS)
WHERE ALL(x in omsn WHERE (ed)--(rs2)--(x))
RETURN *
И это возвращает это.
Это почти правильно, но обратите внимание, что узел 21 маршрута не подключается к ОБА OMS 4 и 2, поэтому я НЕ хочу эту цепь
Результат должен быть примерно таким:
Как бы я изменил свой запрос, чтобы выполнить это вместо этого?(Обратите внимание, что узел RS в середине необходим для некоторых других вещей, которые я также делаю, поэтому я не могу удалить их. Я получил его работу, хотя только с двухслойной иерархией, но это не то, что мне нужно.)
редактировать: простой запрос вставки
CREATE (a:Route)-[:rel]->(b:RS)-[:rel]->(c:OMS)
CREATE (a)-[:rel]->(d:RS)-[:rel]->(e:OMS)
CREATE (f:Route)-[:rel]->(g:RS)-[:rel]->(c)
CREATE (f)-[:rel]->(i:RS)-[:rel]->(e)
CREATE (f)-[:rel]->(k:RS)-[:rel]->(hfg:OMS)
CREATE (l:Route)-[:rel]->(m:RS)-[:rel]->(c)
CREATE (l)-[:rel]->(o:RS)-[:rel]->(e)
CREATE (l)-[:rel]->(asd:RS)-[:rel]->(dsf:OMS)
CREATE (l)-[:rel]->(ds:RS)-[:rel]->(gdg:OMS)
MATCH (m:OMS) WHERE id(m) = 4
CREATE (:Route)-[:rel]->(:RS)-[:rel]->(m)
RETURN *