You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB中如何筛选分类后排序并查询指定文档的排名

MongoDB 按分类排名并查询指定ID排名实现方案

实现思路

  1. 筛选目标分类文档:通过$match过滤出category为"food"且id小于100的文档;
  2. 按分数降序排序:用$sort对筛选后的文档按score从高到低排序;
  3. 计算排名:借助MongoDB 5.0+支持的窗口函数$setWindowFields,为排序后的每个文档生成连续排名(用$rowNumber保证每个文档有唯一排名,若需同分并列排名可改用$rank);
  4. 筛选指定ID:再用$match过滤出目标ID列表[4,1]对应的文档;
  5. 返回指定字段:通过$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:15:33