Cypher Assistance, объедините два дополнительных матча с совпадением - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь сделать как Сайфер,

OPTIONAL MATCH (a1:Article) WHERE a1.status='active'
WITH collect(a1) as a1_col
OPTIONAL MATCH (a2:Article) WHERE a2.category='xyz'
WITH DISTINCT a1_col + collect(a2) as a
MATCH (a)-[:author]->(u:User)
WHERE NOT id(u)=101
RETURN a

Я получаю Type mismatch: a already defined with conflicting type List<Node> ошибку с этим шифром, любая помощь с этим будет принята с благодарностью. Мне нужны отдельные пункты OPTIONAL_MATCH и MATCH здесь.

1 Ответ

0 голосов
/ 09 мая 2018

Переменная a является List<Node>, и вы используете ее внутри предложения MATCH как Node.

Вы должны использовать этот запрос вместо:

OPTIONAL MATCH (a1:Article) WHERE a1.status='active'
WITH collect(a1) as a1_col
OPTIONAL MATCH (a2:Article) WHERE a2.category='xyz'
WITH DISTINCT a1_col + collect(a2) as a
MATCH (article)-[:author]->(u:User)
WHERE NOT id(u)=101 AND article IN a
RETURN a

Я думаю, вы можете оптимизировать свой запрос следующим образом:

MATCH (u:User) WHERE id(u)=101 WITH u
MATCH (a:Article)
WHERE (a.category='xyz' OR a.status='active') AND
      NOT (a)-[:author]->(u)
RETURN collect(DISTINCT a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...