计算mongodb中出现多次的字段值

Sha*_*Ali 4 java mongodb mongodb-query

我有一个像

_id: ObjectId("568f93b5e0ce9f35377c723e")
 rollNo: "123"

 _id: ObjectId("568f93b5e0ce9f35377c723g")
 rollNo: "111"

 _id: ObjectId("568f93b5e0ce9f35377c723g")
 rollNo: "123"
Run Code Online (Sandbox Code Playgroud)

我想查询并获取不同卷号的计数。例如,从我上面的收藏中,我应该得到计数为 2。而且我还想打印出现次数超过 1 的卷号,例如,从我上面的收藏中,应该打印 123 号卷。

我试过

db.student.aggregate([
    { "$group": {
        "_id": "$rollNo",
        "count": { "$sum": 1 }
    }}
],function(err,result) {

});
Run Code Online (Sandbox Code Playgroud)

这将打印每个卷号,然后是其计数。我的收藏非常庞大,因此很难追踪。有没有其他更简单的方法可以实现这一目标?

Vol*_*kyi 6

为了获得不同字段的计数,您可以利用distinct 命令返回字段的不同值数组;您可以检查数组的长度以进行计数。

db.student.distinct("rollNo").length
Run Code Online (Sandbox Code Playgroud)

为了打印出现次数超过 1 的卷号,您可以在分组后利用$match运算符:

db.student.aggregate([     
    {"$group": {"_id": "$rollNo", "count": { "$sum": 1 }}}, 
    {"$match": {count: {"$gt": 1}}} 
])
Run Code Online (Sandbox Code Playgroud)