mah*_*off 70 data-migration mongoose mongodb
随着应用程序的发展,更新/迁移Mongoose模式的最佳实践(或工具)是什么?
vim*_*ude 36
虽然很有趣,MongoDB的诞生是为了响应RDBMS中的模式问题.您不必迁移任何内容,如果需要该字段,您只需在架构定义中设置默认值即可.
new Schema({
name: { type: string }
})
Run Code Online (Sandbox Code Playgroud)
至:
new Schema({
name: { type: string },
birthplace: { type: string, required: true, default: 'neverborn' }
});
Run Code Online (Sandbox Code Playgroud)
我只是遇到了这个问题,我需要更新我的数据库以反映我的架构的更改.经过一番研究后,我决定尝试在mongo控制台中使用updateMany()函数进行更新,我认为它运行得很好.
要将此应用于vimdude的示例,代码将如下所示:
try { db.<collection>.updateMany( { birthplace: null }, { $set: {"birthplace": "neverborn" } } ); } catch(e) { print(e); }
Run Code Online (Sandbox Code Playgroud)
updateMany()函数将基于过滤器更新集合中的所有文档.在这种情况下,过滤器正在查找字段"birthplace"为空的所有文档.然后,它在名为"birthplace"的文档中设置一个新字段,并将其值设置为"neverborn".
运行代码后,修改以反映您的情况运行:
db.<collection>.find().pretty()
Run Code Online (Sandbox Code Playgroud)
验证是否已进行更改.具有"从未出生"价值的新字段"出生地"应显示在您的集合中每个文档的末尾.
希望有所帮助.
更新:经过测试,这不能以其当前形式运行,它有正确的想法,我只需要对模块本身进行大量调整即可完成一次迁移.但是,如果没有一些重大变化并且以某种方式跟踪不同的模式,我不认为它按预期工作.
听起来你想要mongoose-data-migrations
它旨在在您使用文档时迁移文档的旧模式版本,这似乎是处理mongodb中迁移的最佳方法.
您并不真的希望在文档集合(ala alter table)上运行完整的数据集迁移,因为它会给您的服务器带来沉重的负担,并且可能需要应用程序/服务器停机.有时您可能需要编写一个脚本,它只是抓取所有文档应用新的架构/更改和调用save,但您需要了解何时/何地执行此操作.一个例子可能是,向doc init添加迁移逻辑比使服务器运行3小时以运行迁移脚本更具有性能损失.
我发现这个链接也非常有用,基本上更详细地重申了上面的内容,并基本上在php中实现了上面的节点包的概念.
NB该模块是5个月,0叉,但我环顾四周,找不到比abdelsaid的响应风格更好/更有帮助的东西..
| 归档时间: |
|
| 查看次数: |
29581 次 |
| 最近记录: |