Функции массива¶
AQL предоставляет функции для манипулирования массивами на более высоком уровне. Также смотрите numeric functions для функций, работающих с массивами чисел. Если вы хотите объединить элементы массива, эквивалентно join()
в JavaScript, смотрите CONCAT()
и CONCAT_SEPARATOR()
в главе о строковых функциях.
Помимо этого, AQL также предлагает несколько языковых конструкций:
- простой доступ к массивам отдельных элементов,
- операторы массива для расширения и сжатия массива, опционально с встроенным фильтром, ограничением и проекцией,
- операторы сравнения массивов для сравнения каждого элемента массива со значением или элементами другого массива,
- операции над массивами с помощью циклов
FOR
,SORT
,LIMIT
, а такжеCOLLECT
для группировки, который также предлагает эффективную агрегацию.
APPEND()¶
APPEND(anyArray, values, unique) → newArray
Добавляет все элементы массива в другой массив. Все значения добавляются в конец массива (правая часть).
Также может использоваться для добавления одного элемента в массив. Нет необходимости оборачивать его в массив (если только он сам не является массивом). Вместо него можно также использовать PUSH()
.
- anyArray (массив): массив с элементами произвольного типа
- values (array|any): массив, элементы которого должны быть добавлены к anyArray.
- unique (bool, опционально): если установлено значение true, будут добавлены только те значения, которые еще не содержатся в anyArray. По умолчанию используется значение false.
- возвращает newArray (массив): измененный массив.
CONTAINS_ARRAY()¶
Это псевдоним для POSITION()
.
COUNT()¶
Это псевдоним для LENGTH()
.
COUNT_DISTINCT()¶
COUNT_DISTINCT(anyArray) → number
.
Получает количество отдельных элементов в массиве.
- anyArray (массив): массив с элементами произвольного типа
- возвращает number: количество отдельных элементов в anyArray.
COUNT_UNIQUE()¶
Это псевдоним для COUNT_DISTINCT()
.
FIRST()¶
FIRST(anyArray) → firstElement
Получает первый элемент массива. Это то же самое, что и anyArray[0]
.
- anyArray (массив): массив с элементами произвольного типа
- возвращает firstElement (any|null): первый элемент anyArray, или null, если массив пуст.
FLATTEN()¶
FLATTEN(anyArray, depth) → flatArray
Превращает массив массивов в плоский массив. Все элементы массива array будут расширены в результирующем массиве. Элементы, не входящие в массив, добавляются по мере их наличия. Функция выполняет перебор в подмассивы до указанной глубины. Дубликаты не удаляются.
Также смотрите сокращение массива.
- array (массив): массив с элементами произвольного типа, включая вложенные массивы.
- depth (число, опционально): сплющивание до этого количества уровней, по умолчанию 1.
- возвращает flatArray (массив): сплющенный массив
INTERLEAVE()¶
Введено в: v3.7.1
INTERLEAVE(array1, array2, ... arrayN) → newArray
Принимает произвольное количество массивов и создает новый массив с чередованием элементов. Он перебирает входные массивы по кругу, выбирает по одному элементу из каждого массива за итерацию и объединяет их в такой последовательности в результирующий массив. Входные массивы могут содержать разное количество элементов.
- arrays (массив, повторяемый): произвольное количество массивов в качестве нескольких аргументов (не менее 2)
- возвращает newArray (array): чередующийся массив
INTERSECTION()¶
INTERSECTION(array1, array2, ... arrayN) → newArray
Возвращает пересечение всех указанных массивов. Результатом является массив значений, которые встречаются во всех аргументах.
Другие операции над множествами: UNION()
, MINUS()
и OUTERSECTION()
.
- arrays (array, repeatable): произвольное количество массивов в качестве нескольких аргументов (не менее 2).
- возвращает newArray (массив): единый массив, содержащий только те элементы, которые есть во всех предоставленных массивах. Порядок элементов случайный. Дубликаты удаляются.
JACCARD()¶
Введено в: v3.7.0
JACCARD(array1, array2) → jaccardIndex
Вычисляет индекс Жаккара двух массивов.
Эта мера сходства также известна как Intersection over Union и может быть вычислена (менее эффективно и более многословно) следующим образом:
1 2 3 |
|
- array1 (массив): массив с элементами произвольного типа
- array2 (массив): массив с элементами произвольного типа
- возвращает jaccardIndex (число): вычисленный индекс Жаккарда входных массивов array1 и array2.
LAST()¶
LAST(anyArray) → lastElement
Получает последний элемент массива. Это то же самое, что и anyArray[-1]
.
- anyArray (массив): массив с элементами произвольного типа
- возвращает lastElement (any|null): последний элемент anyArray или null, если массив пуст.
LENGTH()¶
LENGTH(anyArray) → length
Определите количество элементов в массиве.
- anyArray (массив): массив с элементами произвольного типа
- возвращает length (число): количество элементов массива anyArray.
LENGTH() также может определить количество ключей атрибутов объекта / документа, количество документов в коллекции и длину символов строки.
Вход | Длина |
---|---|
Строка | Количество символов Юникода |
Число | Количество символов Юникода, представляющих число |
Массив | Количество элементов |
Object | Количество элементов первого уровня |
true | 1 |
false | 0 |
null | 0 |
MINUS()¶
MINUS(array1, array2, ... arrayN) → newArray
Возвращает разность всех указанных массивов.
Другие операции над множествами: UNION()
, INTERSECTION()
и OUTERSECTION()
.
- arrays (array, repeatable): произвольное количество массивов в качестве нескольких аргументов (не менее 2).
- возвращает newArray (массив): массив значений, которые встречаются в первом массиве, но не встречаются ни в одном из последующих массивов. Порядок в результирующем массиве не определен, и на него не следует полагаться. Дубликаты будут удалены.
NTH()¶
NTH(anyArray, position) → nthElement
Получение элемента массива в заданной позиции. Это то же самое, что и anyArray[position]
для положительных позиций, но не поддерживает отрицательные позиции.
- anyArray (массив): массив с элементами произвольного типа
- position (число): позиция нужного элемента в массиве, позиции начинаются с 0.
- возвращает nthElement (any|null): элемент массива в заданной позиции. Если позиция отрицательна или выходит за верхнюю границу массива, то будет возвращен null.
OUTERSECTION()¶
OUTERSECTION(array1, array2, ... arrayN) → newArray
Возвращает значения, которые встречаются только один раз во всех указанных массивах.
Другие операции над множествами: UNION(), MINUS() и INTERSECTION().
- arrays (array, repeatable): произвольное количество массивов в качестве нескольких аргументов (не менее 2).
- возвращает newArray (массив): единый массив, содержащий только те элементы, которые существуют только один раз во всех предоставленных массивах. Порядок элементов является случайным.
POP()¶
POP(anyArray) → newArray
Удалить последний элемент из массива.
Чтобы добавить элемент (правая сторона), смотрите PUSH().
Чтобы удалить первый элемент, смотрите SHIFT().
Чтобы удалить элемент в произвольной позиции, смотрите REMOVE_NTH().
- anyArray (массив): массив с элементами произвольного типа
- возвращает newArray (массив): любойМассив без последнего элемента. Если он уже пуст или в нем остался только один элемент, возвращается пустой массив.
POSITION()¶
POSITION(anyArray, search, returnIndex) → position
Возвращает, содержится ли search в array. Опционально возвращает позицию.
- anyArray (массив): стог сена, массив с элементами произвольного типа.
- search (any): иголка, элемент произвольного типа.
- returnIndex (bool, опционально): если установлено значение true, вместо булевого числа возвращается позиция совпадения. По умолчанию false.
- возвращает позицию (bool|number): true, если search содержится в anyArray, false в противном случае. Если включен returnIndex, возвращается позиция совпадения (позиции начинаются с 0), или -1, если оно не найдено.
Чтобы определить, встречается ли строка в другой строке и в какой позиции, смотрите функцию CONTAINS() string.
PUSH()¶
PUSH(anyArray, value, unique) → newArray
Добавляет значение к любому массиву (правая часть).
Чтобы удалить последний элемент, смотрите POP().
Чтобы добавить значение (левая часть), смотрите UNSHIFT().
Чтобы добавить несколько элементов, смотрите APPEND().
- anyArray (массив): массив с элементами произвольного типа.
- значение (any): элемент произвольного типа
- unique (bool): если установлено значение true, то значение не добавляется, если уже присутствует в массиве. По умолчанию false.
- возвращает newArray (массив): любой массив с значением, добавленным в конец (правая часть).
Примечание: Флаг unique контролирует только добавление значения, если оно уже присутствует в anyArray. Дублирующие элементы, которые уже существуют в любом массиве, не будут удалены. Чтобы сделать массив уникальным, используйте функцию UNIQUE().
REMOVE_NTH()¶
REMOVE_NTH(anyArray, position) → newArray
Удаляет элемент в позиции из anyArray.
Чтобы удалить первый элемент, смотрите SHIFT().
Чтобы удалить последний элемент, смотрите POP().
- anyArray (массив): массив с элементами произвольного типа.
- position (число): позиция элемента, который нужно удалить. Позиции начинаются с 0. Поддерживаются отрицательные позиции, при этом -1 является последним элементом массива. Если position выходит за границы, массив возвращается без изменений.
- возвращает newArray (массив): любой массив без элемента в позиции.
REPLACE_NTH()¶
Введено в: v3.7.0
REPLACE_NTH(anyArray, position, replaceValue, defaultPaddingValue) → newArray
Заменяет элемент в позиции в anyArray на replaceValue.
- anyArray (массив): массив с элементами произвольного типа
- position (число): позиция заменяемого элемента. Позиции начинаются с 0. Поддерживаются отрицательные позиции, при этом -1 является последним элементом массива. Если отрицательная позиция выходит за границы, то она устанавливается на первый элемент (0).
- replaceValue значение, которое будет вставлено в позицию.
- defaultPaddingValue для вставки, если position находится на два или более элемента дальше последнего элемента в любом массиве.
- возвращает newArray (массив): anyArray с элементом в позиции, замененным replaceValue, или добавленным к anyArray и, возможно, заполненным defaultPaddingValue.
Допускается указывать позицию за верхней границей массива:
- replaceValue добавляется, если position равно длине массива
- если больше, то defaultPaddingValue добавляется к anyArray столько раз, сколько необходимо для размещения replaceValue в позиции
- если в вышеприведенном случае не указано defaultPaddingValue, то выдается ошибка запроса
REMOVE_VALUE()¶
REMOVE_VALUE(anyArray, value, limit) → newArray
Удаляет все вхождения value в anyArray. Опционально с ограничением на количество удалений.
- anyArray (массив): массив с элементами произвольного типа
- значение (любое): элемент произвольного типа
- limit (число, опционально): ограничение числа удалений этим значением.
- возвращает newArray (массив): любой массив с удаленным значением.
REMOVE_VALUES()¶
REMOVE_VALUES(anyArray, values) → newArray
Удаляет все вхождения любого из значений из любого массива.
- anyArray (массив): массив с элементами произвольного типа
- values (массив): массив с элементами произвольного типа, которые должны быть удалены из anyArray.
- возвращает newArray (массив): любойМассив с удаленными отдельными значениями.
REVERSE()¶
REVERSE(anyArray) → reversedArray
Возвращает массив с перевернутыми элементами.
- anyArray (массив): массив с элементами произвольного типа
- возвращает reversedArray (массив): новый массив со всеми элементами anyArray в обратном порядке.
SHIFT()¶
SHIFT(anyArray) → newArray
Удаляет первый элемент из anyArray.
Чтобы добавить элемент (с левой стороны), смотрите UNSHIFT().
Чтобы удалить последний элемент, смотрите POP().
Чтобы удалить элемент в произвольной позиции, смотрите REMOVE_NTH().
- anyArray (массив): массив с элементами произвольного типа
- возвращает newArray (массив): anyArray без крайнего левого элемента. Если anyArray уже пуст или в нем остался только один элемент, возвращается пустой массив.
SLICE()¶
SLICE(anyArray, start, length) → newArray
Извлечение фрагмента из любого массива.
- anyArray (массив): массив с элементами произвольного типа
- start (число): начать извлечение с данного элемента. Позиции начинаются с 0. Отрицательные значения указывают на позиции с конца массива.
- length (число, опционально): извлечение до length элементов, или всех элементов от start до length, если отрицательно (исключающее).
- возвращает newArray (массив): указанный фрагмент любого массива. Если length не указано, будут возвращены все элементы массива, начиная с start.
SORTED()¶
SORTED(anyArray) → newArray
Сортирует все элементы в любом массиве. Функция будет использовать порядок сравнения по умолчанию для типов значений AQL.
- anyArray (массив): массив с элементами произвольного типа
- возвращает newArray (массив): anyArray, с отсортированными элементами.
SORTED_UNIQUE()¶
SORTED_UNIQUE(anyArray) → newArray
Сортирует все элементы в любом массиве. Функция будет использовать порядок сравнения по умолчанию для типов значений AQL. Кроме того, значения в результирующем массиве будут уникальными.
- anyArray (массив): массив с элементами произвольного типа
- возвращает newArray (массив): любой массив, элементы которого отсортированы и удалены дубликаты.
UNION()¶
UNION(array1, array2, ... arrayN) → newArray
Возвращает объединение всех указанных массивов.
Другие операции с массивами: MINUS(), INTERSECTION() и OUTERSECTION().
- arrays (массив, повторяемый): произвольное количество массивов в качестве нескольких аргументов (не менее 2).
- возвращает newArray (массив): все элементы массива, объединенные в один массив, в любом порядке
UNION_DISTINCT()¶
UNION_DISTINCT(array1, array2, ... arrayN) → newArray
.
Возвращает объединение отличительных значений всех указанных массивов.
- arrays (array, repeatable): произвольное количество массивов в качестве нескольких аргументов (не менее 2).
- возвращает newArray (массив): элементы всех заданных массивов в одном массиве, без дубликатов, в любом порядке.
UNIQUE()¶
UNIQUE(anyArray) → newArray
Возвращает все уникальные элементы в anyArray. Для определения уникальности функция будет использовать порядок сравнения.
- anyArray (массив): массив с элементами произвольного типа
- возвращает newArray (массив): любой массив без дубликатов, в любом порядке.
UNSHIFT()¶
UNSHIFT(anyArray, value, unique) → newArray
Добавьте значение к любому массиву (левая часть).
Чтобы удалить первый элемент, смотрите SHIFT().
Чтобы добавить значение (правая часть), смотрите PUSH().
- anyArray (массив): массив с элементами произвольного типа.
- значение (any): элемент произвольного типа
- unique (bool): если установлено значение true, то значение не добавляется, если уже присутствует в массиве. По умолчанию false.
- возвращает newArray (массив): любой массив с значением, добавленным в начало (левая часть).
Примечание: Флаг unique контролирует только добавление значения, если оно уже присутствует в anyArray. Дублирующие элементы, которые уже существуют в любом массиве, не будут удалены. Чтобы сделать массив уникальным, используйте функцию UNIQUE().