如何用Mongoose的aggregate()将二维results数组转为长度一维数组
解决方案:使用Mongoose Aggregate转换二维结果数组为长度数组
要将存储用户测验响应的二维results数组转换为各子数组长度组成的一维数组,你可以利用MongoDB的$map和$size操作符,通过Mongoose的aggregate()方法实现:
聚合管道代码示例
// 替换YourModel为你的Mongoose模型名称 YourModel.aggregate([ { $project: { results: { $map: { input: "$results", as: "subArray", in: { $size: "$$subArray" } } } } } ]) .exec() .then(processedDocs => console.log(processedDocs)) .catch(err => console.error(err));
代码说明
$project阶段:用于重构输出文档结构,仅处理并保留results字段。$map操作符:遍历输入的$results二维数组,逐个处理每个子数组(用$$subArray指代当前遍历到的子数组)。$size操作符:计算每个子数组的元素数量,将结果作为新数组的对应位置元素。
效果验证
针对输入示例:
{ "results": [["10938381", "10938382"], [], ["10938383", "10938384", "10938385"], ["10938386"]] }
经过上述聚合处理后,输出结果为:
{ "results": [2, 0, 3, 1] }
该方案完全适配子数组数量不固定的场景(2-5个选项均支持),$map会自动遍历整个数组的所有元素,无需针对不同长度做额外调整。
内容的提问来源于stack exchange,提问作者Airbus A330-200
相关产品推荐
相关产品推荐

