如何在mongoDB中基于不同的过滤器更新不同文档的子文档值?

时间:2018-03-09 10:53:53

标签: mongodb mongodb-query spring-data

如何使用单个脚本基于mongoDB中的不同过滤器更新不同文档的子文档值

 {
"_id" : ObjectId("5aa2516c732e89b875rtg"),
"username" : "user1",
"password" : "password1",
"level0" : {
    "level1" : {
        "value1" : 2,
        "value2" : 2
     }
   }
 },
 {
 "_id" : ObjectId("5aa2516c732e89b8hy5"),
  "username" : "user2",
  "password" : "password2",
  "level0" : {
    "level1" : {
        "differntvalue1" : 2,
        "differntvalue2" : 2
     }
   }
 }

这里我只想通过运行单个脚本来更新文档(在子文档中添加新值),结果应该如下所示

{
 "_id" : ObjectId("5aa2516c732e89b875rtg"),
  "username" : "user1",
  "password" : "password1",
   "level0" : {
    "level1" : {
       "value1" : 2,
       "value2" : 2,
       "value3" : 2
   }
 }
},
  {
  "_id" : ObjectId("5aa2516c732e89b8hy5"),
   "username" : "user2",
   "password" : "password2",
   "level0" : {
     "level1" : {
        "differntvalue1" : 2,
        "differntvalue2" : 2,
        "differntvalue3" : 2
   }
 }
}

MongoDB: Upserting and Sub documents - 这个答案很有帮助,但不允许同时对不同的文档进行不同的更新。

1 个答案:

答案 0 :(得分:0)

我只是为每个文档尝试了不同的更新命令。有没有办法与单个更新一起完成?

 db.mycollection.update(
   {"username": "user1"},
   { 
   $set :{
     "level0.level1.value3" : 2
     }
    });
 db.mycollection.update(
  {"username": "user2"},
  { 
   $set :{
    "level0.level1.differntvalue3" : 2
    }
  });