MongoDB最大计数

3

文档结构: userId,名称,产品(数组)

需求: 需要找到拥有最多产品的用户ID。

尝试使用以下查询1计算userID的产品数量,但不确定如何找到其中的最大值

查询1:

db.things.aggregate({$project:{id:"$userId",count:{$size:{"$ifNull":["$Product",[]]}}}})

结果:

Id:1 数量:0

Id:2 数量:7

Id:3 数量:10

最终输出应该是这样的:

Id:3 数量:10


不清楚你在问什么。 - styvane
1个回答

5

您需要在count上执行$sort,然后将排序结果的数量限制为1,以仅获取具有最大计数的文档:

db.things.aggregate([ 
    {$project:{ id: "$userId", count: {$size:{"$ifNull":["$Product",[]]} } }}, 
    {$sort : {count : -1}}, 
    {$limit : 1 }
])

当使用 '$max' 操作符时,需要通过 _id=null(或其他常量,所有文档必须在同一组中,以计算它们的最大值)进行分组,然后获取最大值。但是,在聚合管道中,无法获取用户的ID而不进行排序操作。
db.things.aggregate([

    {$project:{
        id: "$userId", count: {$size:{"$ifNull":["$Product",[]]} }
    }},
    {$group: {
        _id: null, 
        max: { $max: "$count" }
    }}
])

db.things.aggregate({ $project:{ id:"$userId",count:{$size:{"$ifNull":["$Product",[]]}} }, $group:{_id:null, max:{$max:"$count"}} })断言:命令失败:{ "errmsg" : "exception: A pipeline stage specification object must contain exactly one field.", "code" : 16435, "ok" : 0 } :聚合失败 - Siva Kumar
请尝试我的更正。如果您的查询正确,它应该可以工作;我没有测试它,因为您没有提供一些文档模式。 - sergiuz
工作正常。非常感谢! - Siva Kumar
但唯一的问题是我没有得到用户ID,得到的响应是这样的(“_id”:null,“Max”:10}。 - Siva Kumar
在这种情况下,您还可以使用$sort,这是正确的方法。https://docs.mongodb.org/manual/reference/operator/aggregation/sort/#pipe._S_sort。而不是$group。尝试这个:db.things.aggregate([          {$project:{         id:“$ userId”,count:{$size:{“$ ifNull”:[“$ Product”,[]]}}     }},    {$sort:{count:-1}},     {$limit:1} ]),我会更新我的回复。 - sergiuz

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