Группировка и запрос по месяцам и дням в Mongo DB

У меня есть коллекция с именем «заказы», ​​и в ее документах есть атрибуты _id, totalAmount и orderTime. Я хочу получить общее количество заказов в данном месяце, заказанных по дням. Вот запрос MySQL для этого (при условии, что данный месяц равен 9)

SELECT EXTRACT(DAY FROM orderTime) as day, SUM(totalAmount)
FROM orders
where EXTRACT(MONTH FROM orderTime)=9
GROUP BY day;

Мне нужен запрос Mongo, который выполняет точно такую ​​же задачу. Могу ли я в любом случае добиться этого?


person paarandika    schedule 03.12.2014    source источник
comment
Является ли orderTime полем ISODate? Покажите примерные данные.   -  person BatScream    schedule 03.12.2014


Ответы (1)


Предполагая, что orderTime является полем ISODate, вам необходимо использовать конвейер агрегации, как показано ниже:

  • Project поле для каждой записи, отображающее значения дня и месяца.
  • Match все записи, значение месяца которых = 9.
  • Group по полю дня и вычислить сумму по полю totalAmount.
  • Затем project обязательные поля.

Код:

db.orders.aggregate([
{$project:{"totalAmount":1,
           "day":{$dayOfMonth:"$orderTime"},
           "month":{$month:"$orderTime"}}},
{$match:{"month":9}},
{$group:{"_id":"$day",
         "sum":{$sum:"$totalAmount"},
         "day":{$first:"$day"}}},
{$project:{"_id":0,
           "sum":1,
           "day":1}}
])
person BatScream    schedule 03.12.2014