在Mongo中,是否有内置的方法来更新文档而不是替换查询文档的所有内容,以更新那些相同的节点并附加原始文档中不存在的节点。
例如,假设我将以下文档插入到我的集合中:
{
"name" : "Goku",
"level" : 9000
}
现在,稍后,我希望用我收到的以下文件更新现有文件:
{
"name" : "Goku",
"son" : "Gohan"
}
理想情况下,我想要一种方法来执行更新并生成以下文档:
{
"name" : "Goku",
"level" : 9000,
"son" : "Gohan"
}
标准情况是用新文档覆盖现有文档(应该如此)。但是,是否有内置或巧妙的方法来实现上述结果,而无需先找到第一个文档,附加到其上,然后执行更新?
感谢。
- 编辑 -
@pennstatephil在下面有正确的答案。以防万一有人对此有所帮助,这里是Java中驱动程序版本2.12.0中此示例的实现:
String json = "{'name' : 'Goku', 'level' : 9000 }";
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', 'son' : 'Gohan'}";
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);