I have simple MongoDB collection:
> db.installer.find().pretty()
{
"_id" : ObjectId("51a875c83146de1db23d25d4"),
"dt" : ISODate("2013-05-31T10:04:56.567Z"),
"ev" : "screenDisplay_welcome"
}
{
"_id" : ObjectId("51a875c83146de1db23d25d5"),
"dt" : ISODate("2013-05-31T10:04:56.568Z"),
"ev" : "distribution"
}
...
{
"_id" : ObjectId("51a87a4d3146de1e6a8de9e2"),
"dt" : ISODate("2013-05-31T10:24:13.901Z"),
"ev" : "screenDisplay_welcome"
}
'ev' - some event. 'dt' - datetime of this event
I want to get statistics about this events grouped by event name and event day:
> db.installer.aggregate([{$group:{_id:{ev:'$ev', dt:{$dayOfYear:'$dt'}}, sum:{$sum:1}}}, {$project:{sum:1, _id:0, name:'$_id.ev', dt:'$_id.dt'}}])
{
"result" : [
{
"sum" : 8,
"name" : "uninstall",
"dt" : 151
},
{
"sum" : 3,
"name" : "screenDisplay_installServices",
"dt" : 151
},
{
"sum" : 558,
"name" : "distribution",
"dt" : 151
},
{
"sum" : 115,
"name" : "screenDisplay_welcome",
"dt" : 151
}
],
"ok" : 1
}
Here i user $dayOfYear command to drop time for all events. Is there any way I can construct my Date object back inside aggregation pipeline?
e.g. "dt" : 151 will be "dt" : ISODate("2013-05-31T00:00:00.000Z")