Neo4j, последовательные запросы пути MATCH - PullRequest
0 голосов
/ 17 марта 2020

Я пытался написать запрос Cypher с несколькими совпадениями, чтобы получить несколько путей

Запрос

MATCH (a:A) --> (b:B) where b.uid="asdfas"
MATCH path = (a) -> (leaf) with collect(path) as paths
MATCH another_path = (b) -> (leaf) with collect(another_path) as paths_2

RETURN paths, paths_2

Результат

Neo.ClientError.Statement.SyntaxError: Variable `paths` not defined 
"RETURN paths, paths_2"

Предложение возврата забывает о path

В отличие от вышеупомянутого, если MATCH приводит только к узлам, а не к списку путей

MATCH (a:A) --> (b:B) where b.uid="asdfas"
MATCH path = (a) -> (leaf) with collect(path) as paths
MATCH (b) --> (c:C) 

RETURN paths, c

Приведенный выше запрос выполняется отлично.

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

A WITH приводит к тому, что все существующие переменные становятся несвязанными , за исключением переменных, которые передаются в условии WITH.

Первое WITH должно пройти b, так что следующий MATCH может использовать его. И второй WITH должен пройти paths, чтобы его можно было вернуть:

MATCH (a:A)-->(b:B) WHERE b.uid="asdfas"
MATCH path = (a)->()
WITH b, COLLECT(path) AS paths
MATCH another_path = (b)->()
WITH paths, COLLECT(another_path) AS paths_2
RETURN paths, paths_2

Еще лучше, ваш второй WITH на самом деле не нужен:

MATCH (a:A)-->(b:B) WHERE b.uid="asdfas"
MATCH path = (a)->()
WITH b, COLLECT(path) AS paths
MATCH another_path = (b)->()
RETURN paths, COLLECT(another_path) AS paths_2
1 голос
/ 17 марта 2020

В вашем первом запросе вам нужно добавить paths в ваш окончательный оператор with, чтобы он был доступен для оператора RETURN.

MATCH another_path = (b) -> (leaf) with collect(another_path) as paths_2, paths

Лично мне нравится помещать операторы WITHWHERE) в отдельные строки, чтобы сделать эти вещи потенциально более ясными относительно того, что передается

MATCH (a:A) --> (b:B) 
WHERE b.uid="asdfas"

MATCH path = (a) -> (leaf) 
WITH collect(path) as paths

MATCH another_path = (b) -> (leaf) 
WITH collect(another_path) as paths_2, paths

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