我有簡單的MongoDB集合:如何構建與聚合框架日期MongoDB中
> 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' - 一些事件。 「DT」 - 這一事件
我想獲得有關此事件的事件名稱和事件當天分組統計數據的日期時間:
> 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
}
在這裏,我的用戶$ DAYOFYEAR命令刪除時間安排所有活動。 有什麼辦法可以構建我的日期對象返回聚合管道內?
例如「DT」:151將「DT」:ISODate( 「2013-05-31T00:00:00.000Z」)
不,不與聚合框架,你不能在一個聚合對象表達構建一個Date對象(至少在2.2): - /請問日期字符串而不是一個日期是一個選項,或者可能使用MapReduce? –
不要使用$ dayOfYear(如果你有超過一年的數據,它不會正常工作),你可以使用我在這裏描述的技巧:http://www.kamsky.org/1/post/ 2013/03/stupid-date-trick-with-aggregation-framework.html - 基本上就是從$ group階段之前的日期開始放下小時,分鐘,秒和毫秒。 –
@AsyaKamsky感謝您的鏈接。這就是我一直在尋找的! –