有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring数据MongoTemplate更新嵌套数组失败

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);

共 (1) 个答案

  1. # 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);