Как вы or
условий, а не and
? Пример ниже:Конъюнкции в разделе MATCH?
START user = node({id})
MATCH
(user)-[:follows]->(followed),
(follower)-[:follows]->(user)
RETURN user, followed, follower
Что я хочу получить обратно есть: user
, независимо от того, следует ли кто-нибудь ее или она следует ли кто-нибудь. Все followers
, если есть. Все followed
если есть.
Запрос выше действует так, как если бы он был and
. Если если user
не следует никому, или никто не следует за пользователем, ничего не возвращается.
Вот что-то еще я пробовал, но я получаю ошибку синтаксиса на нем:
start a = node(40663)
with a, a as b
match (b)-[:follows]->(c)
with b, a as d
(e)-[:follows]->(d)
return a, c, e;
Ошибка:
SyntaxException: string matching regex `$' expected but `(' found
Think we should have better error message here? Help us by sending this query to [email protected]
Thank you, the Neo4j Team.
"start a = node(40663) with a, a as b match (b)-[:follows]->(c) with b, a as d (e)-[:follows]->(d) return a, c, e"
^
Независимо от этой ошибки, уменьшенная query (только с одним with
) возвращает нулевые результаты, так что, похоже, это не так.
Второй вариант не эквивалентен: мне нужны те, кто следит за «пользователем» и теми, кого «пользователь» следует в отдельных сумках. Труднее понять проблему, которая применима и к вашему первому варианту, и к моему варианту. Если «пользователь» следует за собой, то она будет перечисляться дважды в каждом списке (что неверно по всем счетам, она следует за собой только один раз и один раз). Поэтому мне пришлось заменить 'a, collection (distinct b), collection (distinct c)' в предложении return. Но я все еще не могу сказать, является ли это ошибкой, или есть какая-то логика. –