文件结构: userId,name,product(Array)
要求: 需要找到拥有最多产品数量的userId。
尝试使用以下查询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次
答案 0 :(得分:3)
您需要在$sort
上count
,而不是$limit
排序结果数为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" }
}}
])