WITH¶
Запрос AQL может начинаться с ключевого слова WITH, за которым следует список коллекций, из которых неявно читается запрос.
Неявный означает, что коллекции не указаны явно в таких конструкциях языка, как
FOR ... IN collectionINSERT ... INTO collectionUPDATE ... в коллекции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 | |