MongoDB агрегат в пределах ежедневной группировки
У меня есть несколько документов в Монго, которые выглядят примерно так:
{
_id : ObjectId("..."),
"make" : "Nissan",
..
},
{
_id : ObjectId("..."),
"make" : "Nissan",
"saleDate" : ISODate("2013-04-10T12:39:50.676Z"),
..
}
В идеале я хотел бы иметь возможность подсчитать по количеству проданных автомобилей за день. Затем я хотел бы посмотреть либо сегодня, либо окно, такое как сегодня, в течение последних семи дней.
Я смог выполнить ежедневный просмотр с некрасивым кодом
db.inventory.aggregate(
{ $match : { "saleDate" : { $gte: ISODate("2013-04-10T00:00:00.000Z"), $lt: ISODate("2013-04-11T00:00:00.000Z") } } } ,
{ $group : { _id : { make : "$make", saleDayOfMonth : { $dayOfMonth : "$saleDate" } }, cnt : { $sum : 1 } } }
)
Который затем дает результаты
{
"result" : [
{
"_id" : {
"make" : "Nissan",
"saleDayOfMonth" : 10
},
"cnt" : 2
},
{
"_id" : {
"make" : "Toyota",
"saleDayOfMonth" : 10
},
"cnt" : 4
},
],
"ok" : 1
}
Так что это нормально, но я бы предпочел не менять значения даты и времени в запросе. Затем, как я уже упоминал выше, я хотел бы иметь возможность выполнить этот запрос (опять же, без необходимости каждый раз его изменять) и видеть одинаковые результаты, подгруппированные по дням за последнюю неделю.
Ох, и вот пример данных, которые я использовал для запроса
db.inventory.save({"make" : "Nissan","saleDate" : ISODate("2013-04-10T12:39:50.676Z")});
db.inventory.save({"make" : "Nissan"});
db.inventory.save({"make" : "Nissan","saleDate" : ISODate("2013-04-10T11:39:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-09T11:39:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:38:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:37:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:36:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:35:50.676Z")});
Заранее спасибо, Кевин