我想使用 findAndModify 来更新嵌入文档的字段。例如,如果我要插入此文档。
{
'name':'Goku',
'level':9000,
'family':{
'son':'Grandpa Gohan',
'wife':'Chi Chi'
}
}
然后在稍后的某个时间,插入以下文档:
{
'name':'Goku',
'type':'Super Saiyan',
'family':{
'son':'Gohan',
'father':'Bardock'
}
}
期望的最终结果是:
{
'name':'Goku',
'level':9000,
'type':'Super Saiyan',
'family':{
'son':'Gohan',
'father':'Bardock',
'wife':'Chi Chi'
}
}
我尝试使用下面的代码在 Java 中实现这一点,但无济于事。是否有任何内置功能可以实现上述预期结果?
String json = "{'name':'Goku', 'level':9000, 'family':{'son':'Grandpa Gohan', 'wife':'Chi Chi'} }";
DBObject document = (DBObject) JSON.parse(json);
BasicDBObject update = new BasicDBObject("$set", document);
BasicDBObject query = new BasicDBObject().append("name", document.get("name"));
collection.findAndModify(query, null, null, false, update, false, true);
json = "{'name':'Goku', 'type':'Super Saiyan', 'family':{'son':'Gohan', 'father':'Bardock'} }";
document = (DBObject) JSON.parse(json);
update = new BasicDBObject("$set", document);
query = new BasicDBObject().append("name", document.get("name"));
collection.findAndModify(query, null, null, false, update, false, true);
- 编辑 -
Neil Lunn 在下面发布了正确答案。对于任何好奇这在 Java 中意味着什么的人,您只需为上面的代码更改一行即可获得所需的结果:
[...]
json = "{'name':'Goku', 'type':'Super Saiyan', 'family.son':'Gohan', 'family.father':'Bardock'} }";
[...]