Необязательное совпадение с изменением результатов сопоставления, но необходимо применить ГДЕ для необязательного сопоставления ...? - PullRequest
0 голосов
/ 26 января 2019

Есть ли способ применения с ..., где нет необязательного соответствия, не затрагивая исходные сопоставленные узлы?

Следующее прекрасно работает.Сейчас я пытаюсь исключить некоторые результаты из 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?Я попытался с новой переменной, но она не запустится (неизвестная переменная).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...