2016-12-14 45 views
0

我需要按分鐘對日期時間字段進行分組。這是相當容易:Mongo日期聚合輸出日期對象

db.my_collection.aggregate([ 
    { "$group": { 
     "_id": { 
      "year": { "$year": "$meta_data.created_at" }, 
      "dayOfYear": { "$dayOfYear": "$meta_data.created_at" }, 
      "hour": { "$hour": "$meta_data.created_at"}, 
      "minute": { "$minute": "$meta_data.created_at"} 
     }, 
     "count": { "$sum": 1 } 
    }}]) 

的問題是,輸出是:

{ 
    "_id": { 
    "year": 2016, 
    "dayOfYear": 349, 
    "hour": 16, 
    "minute": 43 
    }, 
    "count": 4 
} 

如果我想通過日期以後要查詢的是不是真的很方便。 如何在DateTime對象中創建聚合輸出?

+0

我覺得你可以做的是CONCAT他們回到串項目階段,希望在你的代碼解析他們回到日期時間最好對象 – Veeram

+0

但我想查詢一個$ lt和$ gt,所以一個字符串不會幫助我... 當前代碼是在地圖減少,這是真的有問題(全局鎖等) – Boaz

+0

以後聚合管道?你仍然可以使用$ first在組舞臺中保留created_date對象,並在項目階段使用它們 – Veeram

回答

0

OK - 所以做了我的意思的問題是可行的:

db.my_collection.aggregate([ 
    {"$group": { 
     "_id": { 
      "date_by_minute": {"$subtract": [{"$subtract": 

["$meta_data.created_at", 
{"$multiply":[{"$second": "$meta_data.created_at"} , 1000]}]}, 
    {"$millisecond": "$meta_data.created_at"}]}}, 
       "count": { "$sum": 1 } 
      }} 
      ])