【问题标题】:Spring data MongoTemplate update nested array failingSpring数据MongoTemplate更新嵌套数组失败
【发布时间】:2020-04-15 10:33:47
【问题描述】:

JSON 如下:

{   
"_id" : ObjectId("5e01d02b0e3cfd2e4c5976f0"),
"name" :"SomeName",
"outerEntity" : {
        "accounts" : [
            {
                "accountId" : "1235",
                "type" : "SB",

                "details" : [
                    {
                        "name" : "accountName",
                        "value" : "accName"
                    },
                    {
                        "name" : "ifsc",
                        "value" : "ICICI12122",

                    },

                   {
                        "name" : "address",
                        "value" : "address1",

                    }
                ]
            }
        ],
        "profiles" : null,
        "orders" : null,

      }
}

我正在尝试使用 Mongotemplate 更新来更新字段,如下所示。但更新没有发生。

 Update data = new Update();

data.set("outerEntity.accounts.$.type", "somevalue");

对于每个细节对象,只更新值

data.set("outerEntity.accounts.details.$.value","someValue");   


Query query = new Query();
                query.addCriteria(Criteria.where("name").is("SomeName"));


mongoTemplate.updateFirst(query, update, UserDetails.class);

【问题讨论】:

  • MongoDB 更新查询没有更新嵌套数组字段的功能。它只更新到第一级。

标签: java mongodb spring-boot spring-data mongotemplate


【解决方案1】:

您可以在应用程序级别使用以下方式执行此操作

Query query = new Query();

query.addCriteria(Criteria.where("name").is("SomeName"));

UserDetails details = mongoTemplate.findOne(query, UserDetails.class);

for(Account acc: details.outerEntity.accounts) {

   for(Account.Detail detail : acc.details) {

      detail.value = "someValue";

   }

}
mongoTemplate.save(details);

【讨论】:

    猜你喜欢
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多