2014-12-03 4 views
3

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

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

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

+0

Является '' orderTime' в ISODate' поле? Пожалуйста, покажите некоторые примеры данных. – BatScream

ответ

2

Предполагая 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}} 
]) 
Смежные вопросы