2

生产后文档结构发生变化如何处理。

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

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

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

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

cursor.All(&userDetails)在 Go 中使用 decode(deserialize) 来获取 struct 中的查询输出userDetails。如果我相应地修改其他文档的结构,userDetails前 500 个文档会失败吗?

如何处理这种变化?

4

1 回答 1

3

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

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

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

此命令weight向不存在此字段的旧文档添加一个新字段,并将它们设置为空字符串。

于 2020-02-28T13:22:27.453 回答