Как зациклить диапазон дат в ArangoDB - PullRequest
0 голосов
/ 24 января 2019

Мне нужно возвращать значение для каждой даты между начальной и конечной датой.

Для каждого row: если дата существует в row.date, тогда мне нужно вернуть row.myValue, иначе мне нужно вернуть ноль.

Пример:

dateRange = {start: '2018-01-01', end: '2018-01-03'}
aqlCollection = [
  {date: '2018-01-01', myVal: 1},
  {date: '2018-01-02', myVal: 2},
  {date: '2017-05-18', myVal: 3}
]

Это должно вернуть:

[
  {'2018-01-01': 1},
  {'2018-01-02': 2},
  {'2018-01-03': null}
]

Это можно сделать просто, если в arangodb был цикл WHILE.Или, если бы я мог использовать цикл с использованием инкремента вместо FOR date IN dates, тогда я мог бы просто сказать FOR date=startRange; date<endRange; date+=24hrs.

Любые идеи о том, как этого можно достичь в запросе Аранго?Если это невозможно, я сделаю цикл O (n) после простого запроса по дате и добавлю все несуществующие даты.

1 Ответ

0 голосов
/ 24 января 2019

Пожалуйста, посмотрите на: https://docs.arangodb.com/3.4/AQL/Functions/Date.html.

Если у вас есть атрибут в формате даты, вы можете перечислить элементы коллекции, используя цикл for, и использовать фильтр для атрибута, чтобы получить даты в определенном диапазоне. Как вы уже показали. Добавление индекса на атрибут даст вам хорошее ускорение. Это гарантирует, что будут проверены только объекты с совпадающими датами.

...