使用MongoDB管理架构更改

问题描述 投票:0回答:1

生产后更改文档结构时如何处理。

假设我有500个这样的文档:

{
name: ‘n1’
height: ‘h1’
}

稍后,如果我决定以以下格式添加所有文档:

{
name: ‘n501’
height: ‘h501’
weight: ‘w501’
}

我在Go中使用cursor.All(&userDetails)进行解码(反序列化),以获取结构userDetails中查询的输出。如果我修改其他文档的结构并相应地更改userDetails,则前500个文档将失败?

如何处理此更改?

mongodb go database-design production-environment mongo-go
1个回答
0
投票

如果将新字段添加到结构中,则查询旧文档不会失败。由于旧文档没有在MongoDB中保存新字段,因此查询它们将为您提供结构值,其中新字段将为其zero value。例如。如果其类型为string,则为空字符串"";如果为int字段,则为0

如果困扰您旧文档没有这个新字段,您可以像这样在mongo控制台中扩展它们:

db.mycoll.updateMany({ "weight": {$exists:false} }, { $set: {"weight": ""} } )

此命令将新的weight字段添加到不存在该字段的旧文档中,将其设置为空字符串。

© www.soinside.com 2019 - 2024. All rights reserved.