覆盖生产MongoDB中的现有文档

覆盖生产MongoDB中的现有文档,mongodb,production-environment,upsert,Mongodb,Production Environment,Upsert,我最近将一个字段从object更改为object数组 在我的产品中,这个字段只有14个文档,所以我决定更改这些字段 有什么最佳实践可以做到这一点吗 因为这是在我的生产,我需要做的最好的方式可能吗 我得到了这些集合的文档Id。比如['xxx','yyy','zzz',…] 我的文档结构是 _id:"xxx",option1:{"op1":"value1","op2":"value2"},option2:"some value" 我想改变它,就像将对象转换为对象数组一样 _id:"xxx",opt

我最近将一个字段从object更改为object数组

在我的产品中,这个字段只有14个文档,所以我决定更改这些字段

有什么最佳实践可以做到这一点吗

因为这是在我的生产,我需要做的最好的方式可能吗

我得到了这些集合的文档Id。比如['xxx','yyy','zzz',…]

我的文档结构是

_id:"xxx",option1:{"op1":"value1","op2":"value2"},option2:"some value"
我想改变它,就像将对象转换为对象数组一样

_id:"xxx",option1:[{"op1":"value1","op2":"value2"},
                   {"op1":"value1","op2":"value2"}
                 ],option2:"some value"

我能用upsert吗?如果是这样,怎么做?

由于需要基于旧值创建字段的新值,因此应该使用如下查询检索每个文档

db.collection.find({ "_id" : { "in" : [<array of _id's>] } })

文档结构相当简单,因此我省略了输入从oldVal创建newVal的实际代码。

因为它是一种嵌入式文档类型,您可以使用push查询

db.collectionname.update({_id:"xxx"},{$push:{option1:{"op1":"value1","op2":"value2"}}})
这将在嵌入式文档中创建文档。希望对您有所帮助

db.collectionname.update({_id:"xxx"},{$push:{option1:{"op1":"value1","op2":"value2"}}})