MongoDB聚合查询:基于test_id匹配向数组对象添加字段
MongoDB聚合查询:为数组内对象添加test_id字段
最优实现写法(MongoDB 3.6+)
假设你的集合名为test_collection,目标数组字段为target_array,需要匹配的test_id值为"your-target-id",聚合查询如下:
db.test_collection.aggregate([ // 先过滤匹配test_id的文档,减少后续处理开销 { $match: { test_id: "your-target-id" } }, // 为数组内每个对象添加test_id字段 { $addFields: { target_array: { $map: { input: "$target_array", as: "obj", in: { $mergeObjects: [ "$$obj", { test_id: "$test_id" } ] } } } } } ])
关键步骤说明
- $match阶段:优先筛选符合条件的文档,避免对无关数据做处理,提升聚合效率。
- $addFields阶段:保留文档原有所有字段,仅更新指定的数组字段,无需手动列出其他字段。
- $map + $mergeObjects:遍历数组中的每个对象,将原对象与包含
test_id的新对象合并,既保留原对象的所有属性,又新增test_id字段。
特殊场景处理
- 如果数组字段可能不存在或为空,
$map会直接返回原状态(空数组或不存在该字段),不会抛出异常。 - 若需匹配多个
test_id值,可将$match条件改为{ test_id: { $in: ["id1", "id2"] } }。
内容的提问来源于stack exchange,提问作者Vinod R
相关产品推荐
相关产品推荐

