В названии сказано довольно много.
Желательно использовать встроенную временную метку ts
, а не дополнительное поле в data
.
В названии сказано довольно много.
Желательно использовать встроенную временную метку ts
, а не дополнительное поле в data
.
Для разбивки на страницы / подсчета вы можете создать такой индекс:
CreateIndex({name:"all_docs_ts",source:collection:Collection('test'),values:[{field:['ts']},{field:['ref']}]})
и затем вы можете разбивать документы на страницы, используя такой запрос:
Paginate(Range(Match('all_docs_ts'),[ToMicros(ToTime('2020-07-14T06:30:00Z'))],[ToMicros(ToTime('2020-07-14T18:59:59Z'))]))
Если вы хотите получить ссылку для возвращенного документа, вы можете использовать такой запрос:
Map(Paginate(Range(Match('all_docs_ts'),[ToMicros(ToTime('2020-07-14T06:30:00Z'))],[ToMicros(ToTime('2020-07-14T18:59:59Z'))])),Lambda(['ts','ref'],Var('ref')))
или получить полные документы:
Map(Paginate(Range(Match('all_docs_ts'),[ToMicros(ToTime('2020-07-14T06:30:00Z'))],[ToMicros(ToTime('2020-07-14T18:59:59Z'))])),Lambda(['ts','ref'],Get(Var('ref'))))
Для подсчета используйте функцию Count ():
Count(Paginate(Range(Match('all_docs_ts'),[ToMicros(ToTime('2020-07-14T06:30:00Z'))],[ToMicros(ToTime('2020-07-14T18:59:59Z'))])))
Помните, что по умолчанию Paginate () возвращает 64 документа на страницу. Вы можете увеличить пакет до 100000 документов:
Paginate(........., {size:100000})
Если набор результатов больше, чем размер, вам нужно перебрать курсор, используя после и до (вы можете найти руководство здесь).
TimeSubtract
, но основная структура осталась прежней. Тот факт, что мне приходится использовать ToMicros
, заставляет меня задуматься, было бы лучше, если бы сохранение правильного типа Date
в данных.
- person qwtel; 13.08.2020