Нужно получить документы с 1-го числа месяца в Монго

#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-го числа месяца, три месяца назад.