Что с пунктом делать? Neo4j

Я не понимаю, что делает предложение WITH в Neo4j. Я прочитал Руководство Neo4j v2.2.2, но не совсем ясно, что касается предложения WITH. Примеров не так много. Например, у меня есть следующий график, где синие узлы - футбольные команды, а желтые - их стадионы.

Я хочу найти стадионы, где играют две или более команды. Я нашел этот запрос, и он работает.

match (n:Team) -[r1:PLAYS]->(a:Stadium)
with a, count(*) as foaf
where foaf > 1
return a

count (*) говорит нам количество совпадающих строк. Но я не понимаю, что делает предложение WITH.

1 ответ

Решение

WITH позволяет передавать данные из одной части запроса в другую. Все, что вы перечислите в WITH, будет доступно в следующей части запроса.

Вы можете использовать агрегацию, SKIP, LIMIT, ORDER BY с WITH, как в RETURN. Разница лишь в том, что ваши выражения должны получить псевдоним с AS alias чтобы иметь доступ к ним в последующих частях запроса.

Это означает, что вы можете объединять в цепочку части запроса, где одни вычисляют некоторые данные, а следующая часть запроса может использовать эти вычисленные данные. В вашем случае это то, что GROUP BY and HAVING будет в SQL, но WITH гораздо мощнее, чем это.

вот еще один пример

match (n:Team) -[r1:PLAYS]->(a:Stadium)
with distinct a 
order by a.name limit 10
match (a)-[:IN_CITY]->(c:City)
return c.name
Другие вопросы по тегам