Есть ли способ применения с ..., где нет необязательного соответствия, не затрагивая исходные сопоставленные узлы?
Следующее прекрасно работает.Сейчас я пытаюсь исключить некоторые результаты из o и s без изменения вывода n.
MATCH (n) WHERE n.id='1'
OPTIONAL MATCH (n)-[:TYPE1]->(o:Label1)
OPTIONAL MATCH (n)-[:TYPE2]->(s:Label1)
WITH n, o, s
OPTIONAL MATCH (n)<-[:TYPE4]-(m)
RETURN distinct n.id as n_id, collect(distinct m.id) as m_ids, count(distinct m) as m_count, collect(distinct s.id)+collect(distinct o.id) as s_ids;
Я хотел бы отфильтровать s и o с этим дополнением:
WITH n, o, s, collect(distinct s)+collect(distinct o) as x, [(s:Label1)-[:TYPE3]->(:Label1) | s] as e
WHERE NONE (s in e WHERE s in x)
Итак, я получаю:
MATCH (n) WHERE n.id='1'
OPTIONAL MATCH (n)-[:TYPE1]->(o:Label1)
OPTIONAL MATCH (n)-[:TYPE2]->(s:Label1)
WITH n, o, s, collect(distinct s)+collect(distinct o) as x, [(s:Label1)- [:TYPE3]->(:Label1) | s] as e
WHERE NONE (s in e WHERE s in x)
WITH n, o, s
OPTIONAL MATCH (n)<-[:TYPE4]-(m)
RETURN distinct n.id as n_id, collect(distinct m.id) as m_ids, count(distinct m) as m_count, collect(distinct s.id) as s_ids;
Но это не возвратожидаемые n узлов.Я ожидал, что n узлов, найденных в первой строке, будут возвращены в самом конце как n.s_ids возвращаются правильно для каждого найденного n узла, но найденные n узлов фильтруются с помощью WITH ... WHERE NONE (s в e WHERE s в x).Как применить «ГДЕ НЕТ (s в e ГДЕ s в x)» к возвращению необязательных совпадений (o и s), а не к самому совпадению (n), когда мне нужно WITH ..., чтобы собрать списки(от o и s) на котором запускать куда (исключая некоторые o и s)?Или я иду по этому совершенно неправильному пути?Это то, что я повторно использую переменную s?Я попытался с новой переменной, но она не запустится (неизвестная переменная).