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
您需要执行$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)
| 归档时间: |
|
| 查看次数: |
12336 次 |
| 最近记录: |