MongoDB中如何筛选分类后排序并查询指定文档的排名
MongoDB 按分类排名并查询指定ID排名实现方案
实现思路
- 筛选目标分类文档:通过
$match过滤出category为"food"且id小于100的文档; - 按分数降序排序:用
$sort对筛选后的文档按score从高到低排序; - 计算排名:借助MongoDB 5.0+支持的窗口函数
$setWindowFields,为排序后的每个文档生成连续排名(用$rowNumber保证每个文档有唯一排名,若需同分并列排名可改用$rank); - 筛选指定ID:再用
$match过滤出目标ID列表[4,1]对应的文档; - 返回指定字段:通过
$project只保留id和rank字段,得到最终结果。
代码片段(MongoDB Shell)
db.collection.aggregate([ // 筛选category为food且id<100的文档 { $match: { category: "food", id: { $lt: 100 } } }, // 按score降序排序 { $sort: { score: -1 } }, // 计算排名,窗口覆盖所有筛选后的文档 { $setWindowFields: { partitionBy: "$category", // 已筛选food,也可省略该参数 sortBy: { score: -1 }, output: { rank: { $rowNumber: {} } } } }, // 筛选指定id列表 { $match: { id: { $in: [4, 1] } } }, // 只保留需要的字段 { $project: { _id: 0, id: 1, rank: 1 } } ])
执行结果
返回内容如下:
{ "id" : 4, "rank" : 2 } { "id" : 1, "rank" : 3 }
内容的提问来源于stack exchange,提问作者Dark
相关产品推荐
相关产品推荐

