【发布时间】:2011-11-28 20:11:58
【问题描述】:
随着应用程序的发展,更新/迁移 Mongoose 架构的最佳做法(或工具)是什么?
【问题讨论】:
标签: mongodb data-migration mongoose
随着应用程序的发展,更新/迁移 Mongoose 架构的最佳做法(或工具)是什么?
【问题讨论】:
标签: mongodb data-migration mongoose
有趣的是,MongoDB 的诞生就是为了应对 RDBMS 中的模式问题。您无需迁移任何内容,如果需要该字段,您只需在架构定义中设置默认值即可。
new Schema({
name: { type: string }
})
到:
new Schema({
name: { type: string },
birthplace: { type: string, required: true, default: 'neverborn' }
});
【讨论】:
我刚刚遇到了这个问题,我需要更新我的数据库以反映对我的架构所做的更改。经过一番研究,我决定尝试在 mongo 控制台中使用 updateMany() 函数进行更新,我认为它运行良好。
要将其应用于 vimdude 的示例,代码如下所示:
try {
db.<collection>.updateMany( { birthplace: null }, { $set:
{"birthplace": "neverborn" } } );
} catch(e) {
print(e);
}
updateMany() 函数将根据过滤器更新集合中的所有文档。在这种情况下,过滤器将查找字段“birthplace”为空的所有文档。然后在这些文档中设置一个名为“birthplace”的新字段,并将其值设置为“neverborn”。
运行代码后,修改后反映你的运行情况:
db.<collection>.find().pretty()
验证是否进行了更改。值为“neverborn”的新字段“birthplace”应显示在集合中每个文档的末尾。
希望对您有所帮助。
【讨论】:
更新:经过测试,这在当前形式下不起作用,它的想法是正确的,我进行了一次迁移以对模块本身进行大量调整。但是如果没有一些重大更改并以某种方式跟踪不同的模式,我认为它不会按预期工作。
听起来你想要猫鼬数据迁移
它旨在在您使用文档时迁移旧架构版本,这似乎是在 mongodb 中处理迁移的最佳方式。
您真的不想在文档集合(ala alter table)上运行完整的数据集迁移,因为它会给您的服务器带来沉重的负载,并且可能需要应用程序/服务器停机。有时您可能需要编写一个简单地抓取所有文档的脚本,应用新模式/更改并调用保存,但您需要了解何时/何地执行此操作。例如,将迁移逻辑添加到 doc init 比关闭服务器 3 小时来运行迁移脚本对性能的影响更大。
我发现这个link 也很有帮助,基本上更详细地重申了上述内容,并且基本上在 php 中实现了上述节点包的概念。
注意该模块已有 5 个月大,0 个分叉,但我环顾四周,找不到比 abdelsaid 的回复风格更好/更有帮助的东西。..
【讨论】: