Перейти к содержанию

WITH

Запрос AQL может начинаться с ключевого слова WITH, за которым следует список коллекций, из которых неявно читается запрос.

Неявный означает, что коллекции не указаны явно в таких конструкциях языка, как

  • FOR ... IN collection
  • INSERT ... INTO collection
  • UPDATE ... в коллекции
  • GRAPH "graph-name" (через определение графа)

и т.д., но известны только во время выполнения запроса. Такой динамический доступ к коллекции невидим для парсера запросов AQL во время компиляции запроса. Динамический доступ возможен через функцию DOCUMENT(), а также при обходе графа (в частности, в варианте с использованием наборов коллекций), поскольку ребра могут указывать на произвольные коллекции вершин.

Коллекции, которые явно используются в запросе, автоматически определяются парсером запросов AQL. Любые дополнительные коллекции, которые будут задействованы в запросе, но не могут быть определены автоматически парсером запроса, могут быть указаны вручную с помощью оператора WITH.

Синтаксис

WITH collection1 [, collection2 [, ... collectionN ] ]

WITH также является ключевым словом, которое используется в других контекстах, например, в операторах UPDATE. Оно должно быть помещено в самое начало запроса, чтобы объявить дополнительные коллекции.

Использование

При использовании RocksDB в качестве механизма хранения операция WITH требуется только в случае кластерного развертывания и только для запросов AQL, которые динамически читают из коллекций вершин как часть обхода графа.

Вы можете включить опцию запуска --query.require-with, чтобы заставить одиночные экземпляры сервера требовать декларации WITH, как кластерные развертывания, для облегчения разработки.

Динамический доступ через функцию DOCUMENT() не требует перечисления задействованных коллекций. Использование именованных графов в обходах (GRAPH "graph-name") также не требует этого, предполагая, что все вершины находятся в коллекциях, которые являются частью графа, как это предусмотрено Graph API. Это означает, что он необходим только для обходов, использующих анонимные графы / наборы коллекций.

Следующий пример запроса указывает коллекцию ребер usersHaveManagers для выполнения обхода графа. Это единственная явно указанная коллекция в запросе. Ее не нужно объявлять с помощью операции WITH.

Однако коллекции вершин необходимо объявить. В этом примере ребра коллекции edge ссылаются на вершины коллекции managers. Эта коллекция объявляется в начале запроса с помощью операции WITH:

1
2
3
WITH managers
FOR v, e, p IN 1..2 OUTBOUND 'users/1' usersHaveManagers
  RETURN { v, e, p }

Комментарии