首页 > 解决方案 > spring data mongo upsert 嵌入对象数组和主文档

问题描述

我的收藏如下;

{
   "_id" : "1",
    "firstName" : "paul",
    "dob" : "2012-12-12",
    "friends" [ {
                  "_id" : "friend_1",
                  "firstName" : "Karan"
                },
                {
                  "_id" : "friend_2",
                  "firstName" : "Chasay"
                } 
              ]
}

现在我想upsert在嵌套和主文档 Input Json 上执行如下

{  
   "_id" : "1", 
   "lastName" : "Cary", 
    "firstName" : "paul",
    "dob" : "2012-12-12", 
   "friends" : [ 
                 {
                   "_id" : "friend_1",
                   "lastName" : "Eric"
                  },
                 {
                   "_id" : "friend_3",
                   "lastName" : "Charan"
                  }  
                  ] 
   }

输出应该是

{  
   "_id" : "1", 
   "lastName" : "Cary", 
   "friends" : [ 
                 {
                   "_id" : "friend_1",
                   "lastName" : "Eric",
                   "firstName" : "Karan"
                  },
                 {
                   "_id" : "friend_3",
                   "lastName" : "Charan"
                  } ,
                 {
                  "_id" : "friend_2",
                  "firstName" : "Chasay"
                }  
                  ] 
   }

问题是这应该在一个查询中完成,如果不可能,请建议,

我试过的:

Query q  =new Query().addCriteria(Cirtiera.where("_id").is(person.getId()));
Document doc = new Document();
template.getConverter().write(person, doc);
Update update = Update.fromDocument("$set", doc);
template.upsert(q, update, Person.class);

上面的查询更新了主对象,但是替换了整个friends列表,我想用Criteria.where("_id").is(person.getId()).and("friends.id").is(person.getFriendsList().getId()) 这个查询在嵌入式数组中进行更新。

我怎样才能做到这一点?

标签: mongodbmongodb-queryspring-data-mongodb

解决方案


推荐阅读