文档结构: 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
文档结构: 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
您需要在count
上执行$sort
,然后将排序结果的数量限制为1,以仅获取具有最大计数的文档:
db.things.aggregate([
{$project:{ id: "$userId", count: {$size:{"$ifNull":["$Product",[]]} } }},
{$sort : {count : -1}},
{$limit : 1 }
])
_id=null
(或其他常量,所有文档必须在同一组中,以计算它们的最大值)进行分组,然后获取最大值。但是,在聚合管道中,无法获取用户的ID而不进行排序操作。db.things.aggregate([
{$project:{
id: "$userId", count: {$size:{"$ifNull":["$Product",[]]} }
}},
{$group: {
_id: null,
max: { $max: "$count" }
}}
])