我有一个像
_id: ObjectId("568f93b5e0ce9f35377c723e")
rollNo: "123"
_id: ObjectId("568f93b5e0ce9f35377c723g")
rollNo: "111"
_id: ObjectId("568f93b5e0ce9f35377c723g")
rollNo: "123"
我想查询并获得不同卷号的计数。例如,从我上面的收藏中,我应该得到2。并且我也想打印出出现次数大于一个的卷号,例如,从我上面的收藏中,应该打印出123号。
我尝试过
db.student.aggregate([
{ "$group": {
"_id": "$rollNo",
"count": { "$sum": 1 }
}}
],function(err,result) {
});
这将打印每个卷编号以及其计数。我的收藏非常庞大,因此很难追踪。还有其他更简单的方法可以实现这一目标吗?
最佳答案
为了获得不重复字段的计数,您可以利用distinct command,它返回一个字段的不重复值数组。您可以检查数组的长度以进行计数。
db.student.distinct("rollNo").length
为了打印出现次数不止一个的卷号,可以在分组后利用$match运算符:
db.student.aggregate([
{"$group": {"_id": "$rollNo", "count": { "$sum": 1 }}},
{"$match": {count: {"$gt": 1}}}
])