mongodb - 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())
这个查询在嵌入式数组中进行更新。
我怎样才能做到这一点?