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
相关产品推荐
相关产品推荐

