MongoDB 最大计数

Siv*_*mar 3 mongodb mongodb-query

文档结构:userId、name、product(Array)

需求:需要找到拥有最多商品的userId。

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

查询1:

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

结果:

编号:1 计数:0

编号:2 数量:7

编号:3 数量:10

最终输出应该是这样的:

编号:3 数量:10

ser*_*iuz 5

您需要执行$sorton操作count,将$limit排序结果的数量改为 1,以仅获取计数最大的文档:

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

使用“$max”运算符时,您需要进行分组_id=null(或其他常量,所有文档必须位于同一组中,以计算其中的最大值),而不是获取最大值。但是,在聚合管道中,如果不进行排序操作,就无法获取用户的 id。

db.things.aggregate([

    {$project:{
        id: "$userId", count: {$size:{"$ifNull":["$Product",[]]} }
    }},
    {$group: {
        _id: null, 
        max: { $max: "$count" }
    }}
])
Run Code Online (Sandbox Code Playgroud)