复制编辑并插入或更新mongo文档

时间:2015-05-07 17:33:12

标签: mongodb mongodb-query

我们在项目中进行了一些更改,因此编写了一个迁移脚本(第一次)。我会在这里解释一下: 注意 - 出于某些原因,我们将date存储为json {date:DD, month:MM, year :YYYY, ...}

  • 收藏集 - 管理员,用户
  • Admin - _id,name :: String,reg_date :: ISODate等
  • 用户 - _id,name :: String,admin_id:Admin._id,formdata:JSON,formname :: String()
  • reg_date分为两部分reg_date >= 01012014然后formname = "H26"其他formname = "H24"

现在需要迁移的新变化是:

  • 日期变更

    • 如果reg_date >= 01012014 && reg_date <= 01112014formname = "H25"
    • 如果reg_date < 01012014formname = "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,否则插入新副本。

0 个答案:

没有答案