MongoDB v5.0:如何在$slice前对Countries数组排序取销量Top5国家?
解决MongoDB聚合中按销量排序后取前5个国家的问题
要解决这个问题,你可以在MongoDB 5.0中使用$sortArray操作符,先对Countries数组按sales降序排序,再执行$slice截取前5个元素。修改后的$project阶段代码如下:
"$project": { "Region": 1, "TotalSales": 1, "Countries": { "$slice": [ { "$sortArray": { "input": "$Countries", "sortBy": { "sales": -1 } } }, 5 ] } }
代码说明
$sortArray的input参数指定要排序的目标数组$Countries,sortBy中的"sales": -1表示按销量从高到低降序排列(如果需要升序则改为1)- 排序完成后,
$slice会从排序后的数组中截取前5个元素,最终得到每个地区销量排名前5的国家
补充说明
如果存在多个国家销量相同的情况,你可以在sortBy中添加额外排序字段来保证结果的稳定性,比如按国家名称升序排序:
"sortBy": { "sales": -1, "name": 1 }
内容的提问来源于stack exchange,提问作者sandeep.kgp
相关产品推荐
相关产品推荐

