生产后更改文档结构时如何处理。
假设我有500个这样的文档:
{
name: ‘n1’
height: ‘h1’
}
稍后,如果我决定以以下格式添加所有文档:
{
name: ‘n501’
height: ‘h501’
weight: ‘w501’
}
我在Go中使用cursor.All(&userDetails)
进行解码(反序列化),以获取结构userDetails
中查询的输出。如果我修改其他文档的结构并相应地更改userDetails
,则前500个文档将失败?
如何处理此更改?
如果将新字段添加到结构中,则查询旧文档不会失败。由于旧文档没有在MongoDB中保存新字段,因此查询它们将为您提供结构值,其中新字段将为其zero value。例如。如果其类型为string
,则为空字符串""
;如果为int
字段,则为0
。
如果困扰您旧文档没有这个新字段,您可以像这样在mongo控制台中扩展它们:
db.mycoll.updateMany({ "weight": {$exists:false} }, { $set: {"weight": ""} } )
此命令将新的weight
字段添加到不存在该字段的旧文档中,将其设置为空字符串。