首页 > 解决方案 > 更新 mongodb 中的双嵌套集合

问题描述

PostsHolder在 MongoDB 中有一个 Java 实体,看起来像这样:

{
   "id":"1",
   "name": "xxx"
   "posts":[
      {
         "_id":"1",
         "inner":{
            "value":"value1",
            "type":"typeX",
         }
      },
      {
         "_id":"2",
         "inner":{
            "value":"value2",
            "type":"type1",
         }
      },
      {
         "_id":"3",
         "inner":{
            "value":"value2",
            "type":"typeX",
         }
      }
   ]
}

我想更新每个post value字段,如果type == 'typeX'

我怎样才能做到这一点?

我已经尝试了下面的代码,但它只改变了posts集合中的第一次出现:

    WriteResult wr = mongoTemplate.updateMulti(
        new Query(where("posts.inner.type").is("typeX")),
        new Update().set("posts.$.inner.value", "changedValue"),
        PostHolder.class,
        "post_holder"
    );

标签: javaspringmongodbspring-dataspring-mongo

解决方案


推荐阅读