【问题标题】:Managing schema changes with MongoDB使用 MongoDB 管理模式更改
【发布时间】:2020-02-28 12:55:14
【问题描述】:

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

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

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

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

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

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

如何处理这种变化?

【问题讨论】:

  • Mongo 中没有模式,这是它的定义特性之一。

标签: mongodb go database-design production-environment mongo-go


【解决方案1】:

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

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

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

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

【讨论】:

  • @Adrian 是的,但不值得这样做,因为这只是一次“更正”。
  • 也许,也许不是 - OP 提供的信息不足。
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 2020-12-06
  • 2011-11-25
  • 2011-05-09
  • 2019-10-19
  • 2021-11-08
  • 2012-10-25
  • 2015-05-01
相关资源
最近更新 更多