本文介绍使用 mongodb 聚合管道的 `$map` 操作符,将原始数组(如 `[1, 2, 3]`)高效转换为结构化对象数组(如 `[{"id": 1}, {"id": 2}, {"id": 3}]`),适用于数据建模、etl 或 api 响应标准化场景。
在 MongoDB 聚合操作中,若需将一个扁平数组(例如 ids: [1, 2, 3, 4, 5, 6])转换为具有统一结构的对象数组(如 data: [{"id": 1}, {"id": 2}, ..., {"id": 6}]),推荐使用 $map 阶段配合 $addFields(或 $set,MongoDB 4.2+ 推荐)实现。该方法无需 JavaScript(避免 $function 的性能与安全限制),完全声明式且可高效利用索引与管道优化。
以下是一个完整、可直接运行的聚合阶段示例:
[
{
$addFields: {
data: {
$map: {
input: "$ids",
as: "idValue",
in: { id: "$$idValue" }
}
}
}
}
]✅ 说明:
in: {
id: "$$idValue",
createdAt: { $toDate: "$$NOW" },
isActive: { $gt: ["$$idValue", 0] }
}⚠️ 注意事项:
input: { $ifNull: ["$ids", []] }总结:通过 $map + $addFields 的组合,可在单个聚合阶段完成数组到对象数组的函数式转换,简洁、高效、易维护,是 MongoDB 数据形态重塑的标准实践。