Получение индекса набора результатов - PullRequest
0 голосов
/ 04 сентября 2018

Есть ли способ получить индекс результатов в aql-запросе?

что-то вроде FOR user IN Users sort user.age DESC RETURN {id:user._id, order:{index?}}

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Если вы хотите перечислить набор результатов и сохранить эти числа в атрибуте order, то это возможно с помощью следующего запроса AQL:

LET sorted_ids = (
  FOR user IN Users
    SORT user.age DESC
    RETURN user._key
)
FOR i IN 0..LENGTH(sorted_ids)-1
  UPDATE sorted_ids[i] WITH { order: i+1 } IN Users
  RETURN NEW

Подзапрос используется для сортировки пользователей по возрасту и возврата массива ключей документов. Затем цикл по числовому диапазону от первого до последнего индекса этого массива используется для итерации по его элементам, что дает желаемое значение порядка (минус 1) в виде переменной i. Текущий элемент массива - это ключ документа, который используется для обновления пользовательского документа атрибутом заказа.

Вышеупомянутый запрос может быть полезен для одноразового вычисления атрибута заказа. Если ваши данные сильно изменятся, то они быстро устареют, и вы, возможно, захотите перенести их на клиентскую сторону.

Связанное обсуждение см. AQL: Счетчик / перечислитель

0 голосов
/ 04 сентября 2018

Если я правильно понимаю ваш вопрос - и не стесняйтесь меня поправлять, это то, что вы ищете:

FOR user IN Users
    SORT user.age DESC
    RETURN {
                id: user._id,
                order: user._key
            }

_key является первичным ключом в ArangoDB.

Если, однако, вы ищете, например, введенные данные (в хронологическом порядке), вам придется установить ключ на ваших вставках и / или создать объект даты / времени и отфильтровать его.

Редактировать:

После некоторых исследований, я полагаю, что эта ссылка может быть вам полезна для AI ключей: https://www.arangodb.com/2013/03/auto-increment-values-in-arangodb/

...