2015-04-21 111 views
4

我在聚集以下管道:貓鼬總輸出格式

$group: { 
    _id: { 
     $dateToString: { 
      format: '%Y-%m-%d', 
      date: '$created_at' 
     } 
    }, 
    num: { 
     $sum: 1 
    } 
} 

這將返回我的數據分組文件的總和,因爲這樣的:

[ 
    { 
     "_id": "2015-04-21", 
     "num": 1871 
    } 
] 

現在我想改變輸出到這樣的事情:

[ 
    ["2015-04-21", 1871] 
] 

這是可以在聚合管道內?還是我必須編寫自己的轉換方法?

回答

3

您可以使用$addToSet$setUnion運營商在您的管道如下:

db.collection.aggregate([ 
    { 
     "$group": { 
      "_id": { 
       "$dateToString": { 
        "format": "%Y-%m-%d", 
        "date": "$created_at" 
       } 
      }, 
      "num": { 
       "$sum": 1 
      } 
     } 
    }, 
    { 
     "$group": { 
      "_id": "$_id", 
      "A": { 
       "$addToSet": "$_id" 
      }, 
      "B": { 
       "$addToSet": "$num" 
      } 
     } 
    }, 
    { 
     "$project": { 
      "_id": 0, 
      "finalArray": { 
       "$setUnion": [ "$A", "$B" ] 
      } 
     } 
    } 
]); 

輸出

/* 0 */ 
{ 
    "result" : [ 
     { 
      "finalArray" : ["2015-04-21", 1871] 
     } 
    ], 
    "ok" : 1 
} 
+1

這正是我想要的東西,受了多少蒙戈非常深刻的印象可以做。 –

+1

@woutr_be事實上,還有[** MapReduce **](http://docs.mongodb.org/manual/core/map-reduce/)操作,儘管它使用原生JavaScript函數其地圖和減少操作。 – chridam

+0

也許這是一個完全獨立的問題,但假設我的模式如下所示:http://pastebin.com/3eMDkysM。是否有可能通過「searchId」,然後是「created_at」對它進行分組?就像這樣:http://pastebin.com/EYLBdDUA –