Node.js + Mongoose.js如何获取命令的总和是放在一个月还是一个星期?

我发现了总体框架,但是如何在一个月或一个星期内完成这些工作? 我正计算一周或一个月内有多less订单。 这些文件是这样的:

{ "_id" : ObjectId("53834167b54a3b22f0079e2c"), "createdDate" : ISODate("2014-05-26T13:28:07.942Z"), "__v" : 0 }, { "_id" : ObjectId("53834167b54a3b22f0079e2c"), "createdDate" : ISODate("2014-05-28T09:28:07.942Z"), "__v" : 0 } 

我想要的是根据createdDate在一个月内放置多less个订单。

我正在使用的当前代码:

 Order.aggregate([ { "$match": { 'createdDate': { "$gte": new Date("2014-05-25"), "$lte": new Date("2014-05-27") } }}, { "$group": { "_id": { "$dayOfYear": "$createdDate" }, "totalCost": { "$sum": "$totalCost" }, "sum": {"$sum": 1} }} ], function(err, result) { console.log(result); if (err) { res.send(400, err); } else { res.send(200, result); } }); 

如果您只想在一段时间内完成总订单,则可以使用$gte$lt样式运算符在date范围内使用范围查询:

 var query = Model.find({ "createdDate": { "$gte": new Date("2014-05-21"), "$lte": new Date("2014-05-29") } }).count() query.exec(function(err, count) { 

如果在该范围内find文件,这将只返回计数。

如果你想从你的文档中总结一个值,或者甚至在该date范围内检索“每日总计”之类的东西,那么你可以使用聚合框架来完成这个工作:

 Model.aggregate([ { "$match": { "$gte": new Date("2014-05-21"), "$lte": new Date("2014-05-29") }}, { "$group": { "_id": { "$dayOfYear": "$createdDate" } "totalValue": { "$sum": "$orderTotal" } }} ], function(err, result) { 

这不仅使用$sum运算符来合计我们的“orderTotal”字段的值,而且还使用date聚合运算符将所有值分组为所给定范围内的每一天。

如果最后一种情况是你想要的,你可以使用各种操作符来分解你想要在结果中包含的各种date。