2015-05-11 120 views
1

我试图按照日期将文档与Mongo聚合框架进行分组。我尝试了一堆东西,无法识别问题。我的查询是这样的:按日期分组Mongo aggregation

// get current date and then get the date 8 months ago 
var now = Date.now() 
var lastMonth = 60*60*24*30*1000*8 
lastMonth = now - lastMonth 

var query = { 
       type: 'something', 
       deleted: {$ne: true}, 
       created: {$gte: lastMonth} 
      } 

    var stickerNames = []; 
    db.Message.aggregate([{$match: query}, 
     {$group: 
      {_id: {data: '$data', 
        month: {$month: '$created'}, 
        year: {$year: '$created'} 
        }, 
      count:{$sum: 1} 
      } 
     }, 
     {$sort: 
      {count: 1}}], 
     function(err, stuff){ 
      if(err){ 
       return res.json({error: err.message}) 
      } 
      else{ 
       return res.json({data: stuff}) 
      } 
    }) 

我试过一吨的不同的东西与日期,并检查其他SO职位,但至今没有奏效。如果我取出创建的:{$ gte:lastMonth}子句,则它返回每个类型为“something”的文档。如果我离开它,它不会返回任何文件。

创建的域模型由

created: {type: Date, default: Date.now} 
+1

一个Date对象负数返回时间戳值而不是毫秒数。你应该这样做:'lastMonth = new Date(now - lastMonth)' ' –

回答

2

据我了解设置“组按日期”,由“日 - 月 - 年”是指组。也许你错过了$dayOfMonth聚合功能?

鉴于这种样本数据集:

> db.w.find({}) 
{ "_id" : ObjectId("55503d31a3d32cf6295ad897"), 
    "created" : ISODate("2014-12-08T12:00:00Z"), 
    "data" : 1 } 
{ "_id" : ObjectId("55503d43a3d32cf6295ad898"), 
    "created" : ISODate("2014-12-08T08:00:00Z"), 
    "data" : 2 } 
{ "_id" : ObjectId("55503d4ba3d32cf6295ad899"), 
    "created" : ISODate("2014-12-08T20:00:00Z"), 
    "data" : 3 } 
{ "_id" : ObjectId("55503d55a3d32cf6295ad89a"), 
    "created" : ISODate("2014-12-06T20:00:00Z"), 
    "data" : 4 } 
{ "_id" : ObjectId("55503d77a3d32cf6295ad89c"), 
    "created" : ISODate("2015-12-08T20:00:00Z"), 
    "data" : 5 } 

这总管道:

> db.w.aggregate([ 
     {$group: 
     { 
      _id: 
      { 
       day: {$dayOfMonth: "$created"}, 
       month: {$month: "$created"}, 
       year: {$year: "$created"} 
      }, 
      total: {$sum: "$data"}, 
      count: {$sum: 1} 
      } 
     }, 
     {$sort: {count: 1}} 
]) 

你会得到预期的结果:

{ "_id" : { "day" : 8, "month" : 12, "year" : 2015 }, "total" : 5, "count" : 1 } 
{ "_id" : { "day" : 6, "month" : 12, "year" : 2014 }, "total" : 4, "count" : 1 } 
{ "_id" : { "day" : 8, "month" : 12, "year" : 2014 }, "total" : 6, "count" : 3 } 
+0

我想按月分组。所有上个月或两个月前的“事情”等... – user137717