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

MongoDB聚合投影中获取嵌套数组长度的实现方法

解决方案

你可以直接在$map阶段对返回的answers字段调用$size运算符计算数组长度,修改后的聚合语句如下:

Quiz.aggregate([
  {
    // 注意:如果_id在库中是ObjectId类型,需要先将字符串转为ObjectId再匹配
    $match: { _id: ObjectId("611478ac34dde61f28dbe4db") },
  },
  {
    $addFields: {
      questions: {
        $map: {
          input: [0, 1], // 可自行修改为需要筛选的题目索引
          as: "i",
          in: {
            // 直接计算指定索引题目answers数组的长度
            answers: { $size: { $arrayElemAt: ["$questions.answers", "$$i"] } }
          }
        }
      }
    }
  },
  {
    $project: {
      "questions.answers": 1
    }
  }
])

可选实现方案

如果你希望保留原有筛选题目的逻辑结构,也可以在$project阶段对questions数组做二次处理,最终效果完全一致:

Quiz.aggregate([
  {
    $match: { _id: ObjectId("611478ac34dde61f28dbe4db") },
  },
  {
    $addFields: {
      questions: {
        $map: {
          input: [0, 1],
          as: "i",
          in: { $arrayElemAt: ["$questions", "$$i"] }
        }
      }
    }
  },
  {
    $project: {
      questions: {
        $map: {
          input: "$questions",
          as: "q",
          in: { answers: { $size: "$$q.answers" } }
        }
      }
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:45:04