如何在MongoDB 4.2中实现文档内字段的内外双向复制?
MongoDB 4.2 嵌套字段与顶层字段双向同步方案
你可以使用MongoDB 4.2及以上版本支持的聚合管道更新能力实现需求,单条语句即可完成全集合批量处理,无需遍历文档:
db.collection.updateMany( {}, // 此处可添加过滤条件,默认匹配全集合所有文档 [ // 同步顶层字段到object嵌套对象中 { $set: { object: { $mergeObjects: [ "$object", // 保留object内原有其他字段 { a: "$a", b: "$b" } // 用顶层a、b字段覆盖object内对应字段 ] } } }, // 同步object嵌套对象内字段到文档顶层 { $set: { a: "$object.a", b: "$object.b" } } ] )
补充说明
- 执行后所有文档的顶层a、b字段和
object嵌套对象内的a、b字段值会完全一致,完全符合你给出的预期结果 - 如果需要同步更多字段,只需在第一个
$set的$mergeObjects参数和第二个$set中对应添加字段映射即可 - 执行更新前可通过以下聚合语句预览修改结果,避免误操作:
db.collection.aggregate([ { $set: { object: { $mergeObjects: [ "$object", { a: "$a", b: "$b" } ] }, a: { $ifNull: [ "$a", "$object.a" ] }, b: { $ifNull: [ "$b", "$object.b" ] } } } ])
内容的提问来源于stack exchange,提问作者Martin Allusse
相关产品推荐
相关产品推荐

