我使用596.935个文档测试了以下内容。 Mongo版本是3.2。我有一个主副本和两个副本集。 该集合包含以下字段:
"dr" : {
"gran" : "Day",
"dix" : NumberInt(121),
"y" : NumberInt(2017),
}
现在我需要从/到添加其他字段。我执行这个:
db.datefieldstest.updateMany(
{ "dr.from": {$exists: true}},
{
$set: {
"dr.from": new Date(),
"dr.to": new Date()
}
}
)
为了使字段对应正确的dix和gran,我编写了一个存储在mongo服务器上的脚本。 要运行更新,请执行以下操作:
db.datefieldstest.find({
}).forEach(function(doc) {
var dates = dateIndexToDateWithFromTo(doc.dr.y, doc.dr.dix, doc.dr.gran);
doc.dr.from = dates.from;
doc.dr.to = dates.to;
db.datefieldstest.save(doc);
})
这个测试花了我大约40分钟。现在,这只是我们实时数据库中实际文档数量的一小部分。在现场,我们有超过50.000.000个文件。请注意,在迁移时无法阻止主数据库。
我的想法是让其中一个副本集(副本集A)独立并在那里执行迁移。在这段时间里,我将主要有读/写和副本集B同步到。 在副本集A中完成迁移后,我将其添加到主文件中并同步新文档,然后将副本集A转换为主文档。
任何人都有更好的建议吗?