有没有办法从单个文档中获得单个字段的不同计数?
以下是文档User
UserSchema: {
name: { type: String, required: true },
created_at: { type: Date, default: now }
}
我想让每个用户创建01/05/2013和06/08/2013,也许我需要计算更多不同的日期。
我可以在count()
上获取这些数据,还是应该让所有拥有find()
的用户使用javascript对其进行计数?
答案 0 :(得分:1)
您可以使用接受查询的collection.count()
表单,以及$or和范围的使用:
db.collection.count({ "$or": [
{ "created_at":
{"$gte": new Date("2014-05-01"), "$lt": new Date("2014-05-02") }
},
{ "created_at":
{"$gte": new Date("2013-08-06"), "$lt": new Date("2013-08-07") }
}
]})
或者您可以将该查询传递给.find()
并根据您的喜好使用光标计数。
但是,我再次读取您的标题,并且不同计数会有所不同,最好使用聚合来获得不同的日期:
db.collection.aggregate([
// Match the dates you want to filter
{ "$match": {
{ "$or": [
{ "created_at": {
"$gte": new Date("2014-05-01"),
"$lt": new Date("2014-05-02")
}},
{ "created_at": {
"$gte": new Date("2013-08-06"),
"$lt": new Date("2013-08-07")
}}
]}
}},
// Group on the *whole* day and sum the count
{ "$group": {
"_id": {
"year": { "$year": "$created_at" },
"month": { "$month": "$created_at" },
"day": { "$dayOfMonth": "$created_at" }
},
"count": { "$sum": 1 }
}}
])
这将为您提供在$or条款中添加的每个选定日期的文档的明确计数。
无需在代码中循环。