使用MongoDB管理架构更改

使用MongoDB管理架构更改,mongodb,go,database-design,production-environment,mongo-go,Mongodb,Go,Database Design,Production Environment,Mongo Go,如何处理生产更改后的文档结构 假设我有500个这样的文档: { name: ‘n1’ height: ‘h1’ } db.mycoll.updateMany({ "weight": {$exists:false} }, { $set: {"weight": ""} } ) 稍后,如果我决定以以下格式添加所有文档: { name: ‘n501’ height: ‘h501’ weight: ‘w501’ } 我正在使用cursor.All(&userDetails)在Go中解码(反序列化),

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

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

{
name: ‘n1’
height: ‘h1’
}
db.mycoll.updateMany({ "weight": {$exists:false} }, { $set: {"weight": ""} } )
稍后,如果我决定以以下格式添加所有文档:

{
name: ‘n501’
height: ‘h501’
weight: ‘w501’
}
我正在使用
cursor.All(&userDetails)
在Go中解码(反序列化),以获取struct
userDetails
中的查询输出。如果我修改了更多文档的结构,并相应地修改了
userDetails
,那么前500个文档的结构会失败吗


如何处理此更改?

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

如果旧文档没有此新字段让您感到困扰,您可以在mongo控制台中对其进行如下扩展:

{
name: ‘n1’
height: ‘h1’
}
db.mycoll.updateMany({ "weight": {$exists:false} }, { $set: {"weight": ""} } )

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

Mongo中没有架构,这是其定义特性之一。@Adrian是的,但不值得这样做,因为这只是一次性的“更正”。也许,也许没有-OP没有足够的信息可以知道。