我找到了总体框架,但是如何在一个月或一周内获得文档?我正在尝试计算一周或一个月内下了多少订单。文件是这样的:
{
"_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
}
我想要的是根据创建日期一个月内下了多少订单。
我当前使用的代码:
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
样式运算符:
var query = Model.find({
"createdDate": {
"$gte": new Date("2014-05-21"), "$lte": new Date("2014-05-29")
}
}).count()
query.exec(function(err, count) {
如果在该范围内找到文档,则只会返回计数。
如果您想对文档内部的值求和,或者甚至确实从该日期范围内检索诸如“每日总计”之类的内容,那么您可以使用聚合框架来执行此操作:
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 aggregation运算符对给定范围内每一天的所有值进行分组。
如果您想要最后一种情况,您可以使用各种运算符来分解您想要在结果中包含的各种日期周期。
关于javascript - Node.js + Mongoose.js 如何获取一个月或一周的订单总数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928680/