7.2 Обновление графа
- 7.2.1 Структура запросов на обновление
- 7.2.2 Возвращение данных
Cypher может использоваться как для извлечения информации, так и для обновления вашего графа.
7.2.1 Структура запросов на обновление
Справка
- Часть запроса Cypher не может одновременно выполнять поиск и обновлять граф.
- Каждая часть может либо читать и производить сопоставление с паттерном в графе, либо выполнять его обновление.
Если вы выполняете чтение из графа, а затем обновляете граф, ваш запрос неявно имеет две части – первая часть представляет собой чтение, а вторая – запись.
Если ваш запрос выполняет только чтение, Cypher фактически не будет искать соответствие образцу, пока вы не запросите результаты. Семантика обновляющего запроса такова, что все чтения будут выполняться до того, как фактически произойдет какая-либо запись. Сначала чтение, а затем запись, это единственный образец, в котором части запроса заданы неявно – при любом другом порядке вы должны будете явно указать части вашего запроса. Части разделяются с помощью оператора WITH. WITH подобен горизонту события, это - барьер между планом и окончательным выполнением этого плана.
Если вы хотите выполнить фильтрацию с помощью агрегированных данных, то должны соединить две читающих части запроса – первая выполняет агрегацию, а второй запрос фильтрует результаты на выходе первого.
START n=node(...) MATCH n-[:friend]-friend WITH n, count(friend) as friendsCount WHERE friendsCount > 3 RETURN n, friendsCount
Используя WITH, вы указываете, как вы хотите выполнить агрегацию, и эта агрегация должна быть завершена прежде, чем Cypher сможет начать фильтрацию.
Вы можете связать столько частей запроса, сколько позволит вам память, выделяемая JVM.
7.2.2 Возвращение данных
Любой запрос может вернуть данные. Если ваш запрос только читает, он должен вернуть данные – в противном случае, он не имеет смысла и не является валидным запросом Cypher. Запросы, которые обновляют граф, не обязаны что-либо возвращать, хотя могут.
После всех частей запроса следует одно финальное предложение RETURN. RETURN не является частью какой-либо части запроса – это как бы символ завершения в конце запроса. Предложение RETURN имеет три суб-предложения, которые начинаются с SKIP/LIMIT и ORDER BY.
Если Вы возвращаете элементы графа из запроса, который только что удалил их, будьте внимательны, вы имеете недействительный указатель. Операции на таком узле могут вызвать загадочные и неочевидные ошибки.