Mongodb - 使用addToSet计算项目数量

7

我按照 组织 分组,并使用 $addToSet 显示与该 组织 相关的不同 machineIds。我想要获取每个 组织machineIds 的计数。然而下面的代码返回的是所有 machineIds 的计数,而不是唯一的计数。是否有其他方法可以获取总唯一的 machineIds

db.getCollection('newcollections').aggregate([{
    $group: {
    _id: {
        organization: "$user.organization"
    },
    machineId: {
        "$addToSet": "$user.machineId"
    },
    count: {
        $sum: 1
    }
    }
}])

你可以展示一下你的文档吗? - styvane
"_id" : { "organization" : "" }, "machineId" : [ "" ], "count" : 2.0000000000000000 - ellier
这个例子只有一个机器ID,但计数是2。 - ellier
你可以使用 distinctdb.collection.distinct("machineId").length; - Harsh Patel
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Vishwas
{ "_id" : ObjectId("757676467467657990"), "__v" : 0, "time" : ISODate("2015-01-13T13:45:19.670Z"), "status" : “成功", "user" : { "organization" : “XYZ 公司”, "machineId" : "xyz3889548564865", } } - ellier
1个回答

18
您需要在投影中使用$size运算符,示例如下:
db.collection.aggregate([{
    $group: {
    _id: {
        organization: "$user.organization"
    },
    machineId: {
        "$addToSet": "$user.machineId"
    }
    }
}, {
    $project: {
    "organization": "$_id.organization",
    "machineId": 1,
    "_id": 0,
    "size": {
        $size: "$machineId"
    }
    }
}])

1
我想按区域划分经销商名称的结果,并通过设置50的限制来获取他名下贷款申请状态的计数。如果我添加到集合中,它总是返回应用程序计数1。 - Amol Suryawanshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接