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

如何基于指定label的level字段分页排序MongoDB文档

按指定子文档字段排序MongoDB查询结果

要实现仅基于painting技能的level字段降序排序,同时批量返回50条结果并跳过已获取的文档,你需要用MongoDB的聚合框架来处理——普通的find排序无法针对数组中特定label的子文档字段做精准排序。

具体聚合查询代码

db.collection.aggregate([
  // 筛选符合条件的文档
  {
    $match: {
      "skills.label": "painting",
      "_id": { $nin: ARRAY_OF_PREVIOUSLY_RETURNED_IDS }
    }
  },
  // 添加临时字段,提取painting技能的level值
  {
    $addFields: {
      "painting_level": {
        $getField: {
          field: "level",
          input: {
            $first: {
              $filter: {
                input: "$skills",
                cond: { $eq: ["$$this.label", "painting"] }
              }
            }
          }
        }
      }
    }
  },
  // 按painting_level降序排序
  {
    $sort: { "painting_level": -1 }
  },
  // 限制返回50条结果
  {
    $limit: 50
  },
  // 可选:移除临时字段,恢复原文档结构
  {
    $project: { "painting_level": 0 }
  }
])

代码说明

  • $match阶段:和你之前的筛选逻辑一致,过滤出包含painting技能且不在已返回ID列表中的文档。
  • $addFields阶段:通过$filter从skills数组中筛选出label为painting的子文档,用$first取唯一匹配项(已通过$match确保每个文档至少有一个painting技能),再用$getField提取其level值存入临时字段painting_level。
  • $sort阶段:基于临时字段painting_level降序排序,实现仅按painting技能的level排序的需求。
  • $limit阶段:控制每次返回50条结果。
  • $project阶段:可选步骤,若不需要保留临时字段painting_level,可移除该字段,返回与原文档结构一致的结果。

内容的提问来源于stack exchange,提问作者Eric

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:42:11