我有一个像

_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}}}
])

09-25 18:33