MongoDB中如何复制字段键值对 将已有f1字段克隆为新字段f2
MongoDB字段复制操作方案
适用版本:MongoDB 4.2+(推荐方案)
你可以直接使用支持聚合管道的更新操作,原子性完成字段复制,不需要额外查询回写,性能更高。针对你给出的嵌套数组结构,将data数组内每个元素的fl(你问题中提到的f1为笔误的话可自行替换)字段复制为新字段f2的语句如下:
db.你的集合名.updateMany( {}, // 此处可填写文档匹配条件,空对象代表更新集合内全部文档 [ { $set: { data: { $map: { input: "$data", as: "item", in: { $mergeObjects: [ "$$item", { f2: "$$item.fl" } // 复制fl字段的值到新字段f2 ] } } } } } ] )
逻辑说明
$map操作符遍历data数组的每一个元素,逐行处理$mergeObjects操作符合并原数组元素的所有字段和新增的f2字段,不会覆盖原有数据- 如果你需要复制的是文档根层级的
f1字段,写法更简单:
db.你的集合名.updateMany({}, [{$set: {f2: "$f1"}}])
兼容低版本(MongoDB 4.2以下)
如果你的MongoDB版本不支持聚合管道更新,可以用遍历文档的方式实现:
db.你的集合名.find({}).forEach(doc => { // 遍历数组每个元素添加f2字段 doc.data.forEach(item => { item.f2 = item.fl; }); // 保存修改后的文档 db.你的集合名.save(doc); })
注意:该方案性能较差,数据量大的场景不推荐使用,尽量升级到4.2以上版本使用聚合更新方案。
内容的提问来源于stack exchange,提问作者bc110402922
相关产品推荐
相关产品推荐

