我们在项目中进行了一些更改,因此编写了一个迁移脚本(第一次)。我会在这里解释一下:
注意 - 出于某些原因,我们将date
存储为json {date:DD, month:MM, year :YYYY, ...}
reg_date >= 01012014
然后formname = "H26"
其他formname = "H24"
现在需要迁移的新变化是:
日期变更
reg_date >= 01012014 && reg_date <= 01112014
则formname = "H25"
和reg_date < 01012014
则formname = "H24"
else(如果reg_date > 01112014
)formname = "H26101"
如果用户表单中包含reg_date > 01112014
,然后将其转换为H26101
我的以下代码无效:
db.Admin.find().forEach(function(admin){
if(hasH26101Date(admin.reg_date)){
var copy = db.user.find({ "admin_id" :admin._id, "formname": "H26"}); //Copy document
if (jsonDataExist(copy)){
var new_data = processData(copy.formdata);
copy[formdata] = new_data;
copy[formname] = "H26101";
var new_query = { "admin_id":admin._id, "formname":"H26101"};
db.user.update(new_query, {$set:{formdata:new_data,formname:"H26101"}},
{upsert:true}});
}
}
});
}
在最后一行代码中 - 如果存在带有new_query的文档,则在同一文档中使用formname n formdata,否则插入新副本。