Синтаксис AQL
AQL
Это встроенный язык запросов к ArangoDB.Типы запросов
Любой AQL запрос должен либо возвращать результат, либо модифицировать данные. При возврате результата запрос должен содержать ключевое слово RETURN, при модификации данных одно из ключевых слов: INSERT, UPDATE, REPLACE, REMOVE или UPSERT.Парсер AQL вернет ошибку, если он обнаружит более одной операции изменения данных в одном и том же запросе, или если не будет определен тип запроса (отсутсвуют ключевые слова).
AQL допускает только один запрос в одной строке запроса. Поэтому точки с запятой, как в SQL, не допускаются.
Пробелы
Пробелы (пробел, возврат каретки, перенос строки и табуляция) могут быть использованы в запросе для повышения его читабельности. Ключевые слова могут быть разделены неограниченным числом пробелов. Пробелы внутри строк должны быть заключены в кавычки.Комментарии
Коментарии можно вписать в любом месте в запросе. Текст, содержащийся в комментарии игнорируется парсером AQL. AQL предоставляет два типа комментариев, похожих на комментарии в C, C++:
- Однострочный комментарий. Начинается с //
- Многострочный комментарий. Заключить тест в /* комментарий */
Например:
/* this is a comment */ RETURN 1
/* these */ RETURN /* are */ 1 /* multiple */ + /* comments */ 1
/* this is a multi line comment */
// a single line comment
Ключевые слова
AQL поддерживает следующие базовые операции:
- FOR: обход массива
- RETURN: возврат результата (проекция)
- FILTER: фильтрация результата
- SORT: сортировка результата
- LIMIT: ограничение выборки (слайсинг)
- LET: создание переменной
- COLLECT: группировка результата
- INSERT: создание нового документа
- UPDATE: частичное обновление существующего документа
- REPLACE: замена существующего документа
- REMOVE: удаление существующего документа
- UPSERT: создать или обновить существующий документ
Пример AQL запроса:
FOR u IN users
FILTER u.type == "newbie" && u.active == true
RETURN u.name
В этом примере использовались базовые операции FOR, FILTER и RETURN. Ключевое слово IN является второстепенным и идет в дополнение к базовым операциям.
Нельзя использовать названия коллекций как ключевые слова. Если все-таки название коллекции совпадает с ключевым словом ( например FOR u IN filter) то для избежании ошибки и доступа к коллекции необходимо называние коллекции заключить в кавычки (FOR u IN "filter")
Ключевые слова регистронезависимы их можно писать как с маленькой так и с большой буквы.
Так же существует еще несколько ключевых слов, которые идут в дополнение к базовым. Дополнительные ключевые слова могут быть добавлены в других версиях ArangoDB, на данный момент (v3.1) список дополнительных ключевых слов такой:
- AGGREGATE
- ALL
- AND
- ANY
- ASC
- COLLECT
- DESC
- DISTINCT
- FALSE
- FILTER
- FOR
- GRAPH
- IN
- INBOUND
- INSERT
- INTO
- LET
- LIMIT
- NONE
- NOT
- NULL
- OR
- OUTBOUND
- REMOVE
- REPLACE
- RETURN
- SHORTEST_PATH
- SORT
- TRUE
- UPDATE
- UPSERT
- WITH
Имена
Имена используются для обозначения объектов (коллекций, атрибутов, переменных и функций) в AQL-запросах
Максимальная длина любого имени - 64 байта. Имена в AQL всегда регистрозависимы.
Ключевые слова не должны использоваться как имена объектов. Если все-таки ключевое слово по какой-то причине используется как имя - то необходимо заключить это имя в кавычки. Например:
FOR f IN `filter`
RETURN f.`sort`
Или:
FOR f IN ´filter´
RETURN f.´sort´
Имена коллекций
Имена коллекций могут быть использованы в запросах так же как они пишутся. Исключение - только если имя коллекции совпадает с ключевым словом, тогда его нужно заключить в кавычки.
Коллекции должны обозначаться по следующим правилам:
- Имя могут содержать только буквы от a до z (a-z) в любом регистре, цифры от 0 до 9, символ подчеркивания (_) или тире (-). Так же никакие non-ASCII символы не разрешены
- Пользовательская коллекция всегда должна начинаться с буквы. Системная коллекция должна начинаться с подчеркивания. Все системные коллекции начинаются с символа подчеркивания, используются для внутренних нужд ArangoDB и не должны использоваться пользователем
- Максимальная длина названия 64 байта
- Имя коллекции регистронезависимо
ALQ содержит ограничение в 256 коллекций на один запрос. Этот лимит распространяется на коллекции документов и на коллекции вершин (графов)
Имена атрибутов
При обращении к атрибутам документов из коллекции необходимо использовать полное имя атрибута (через точку collection_name.attribute). Это связано с тем, что в запросе можно использовать несколько коллекций с неоднозначными именами атрибутов. Чтобы избежать двусмысленности, нельзя писать имя атрибута отдельно.FOR u IN users
FOR f IN friends
FILTER u.active == true && f.active == true && u.id == f.userId
RETURN u.name
В примере выше active, name, id, и userId - это имена атрибутов. Доступ к ним осуществляется через коллекции u (users) и f (friends)
Правила формирования имен атрибутов:
- Имена атрибутов не совпадать с системными именами:
- _id - содержит id документа
- _key - содержит ключ документа
- _rev - содержит номер ревизии документа
- _from - в коллекции вершин указывает ссылку на документ (от)
- _to - в коллекции вершин указывает ссылку на документ (куда)
- Теоретически имена атрибутов могут содержать любые действительные символы в кодировке UTF-8 но на практике это лучше не использовать, так как можно потерять совместимость с JavaScript и другими языками, в которых можно использовать ArangoDB
- Атрибуты с содержанием символа @ должны быть экранированы кавычками
- ArangoDB не ограничивает длину имени атрибута. Но лучше не использовать слишком длинные имена
- Имена атрибутов регистрозависимы
- Атрибуты с пустыми именами (пустая строка) запрещены
Имена переменных
AQL позволяет создать дополнительные переменные в запросах. Имена дополнительных переменных должны отличаться от ключевых слов и названий коллекций.
FOR u IN users
LET friends = u.friends
RETURN { "name" : u.name, "friends" : friends }
В примере мы определили переменную friends, которой присвоили значение u.friends
Допустимые имена переменных - это буквы a-z любого регистра, цифры от 0 до 9, символ подчеркивания (_) и символ доллара ($). Имя переменной не должно начинаться с цифры. Если имя переменной начинается со знака подчеркивания - после него должна идти как минимум одна буква или цифра.
Символ доллара может использоваться только как первая буква переменной.
Комментарии
Отправить комментарий