#mongodb #mongodb-query #redash
Вопрос:
Мне нужно получить документы из коллекции для агрегирования, начиная с 1-го числа текущего месяца.
Я пытаюсь это $dateFromPart
сделать , но это работает не так, как ожидалось, так как он возвращает 0 документов, в то время как ручное указание даты new ISODate('2021-10-01')
возвращает ожидаемый результат.
Я предполагаю, что это потому, что я не могу использовать $dateFromParts
на $match
сцене.
db.messages.aggregate([
{
"$match": {
"timestamp" : {
"$gte" : {
"$dateFromParts" : {
"year" : { "$year" : new ISODate() },
"month" : { "$month" : new ISODate() },
}
}
}
}
}
])
Дополнительная информация:
- Я должен использовать агрегат, позже я выполню еще несколько
$group
операций. - Я не могу использовать javascript для построения дат перед запросом. Этот запрос будет использоваться в Redash, который принимает только ввод json, и вы не можете запускать там javascript.
- Очевидно, что я не могу использовать
new ISODate()
в redash, мне пришлось бы использовать их встроенный$humanTime
, но суть остается прежней. - Коллекция сообщений большая. Более 10 миллионов документов с индексом по отметке времени. Так что мне нужно избегать
COLSCAN
, как чумы. - Использование Mongo 3.6 (я знаю, время для обновления)
- Бонусные баллы, если я смогу выполнить запрос с 1-го числа месяца, три месяца назад.