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 |
|