MongoDB - 如何查找和追加/查找和插入文档和字段

时间:2014-04-11 21:41:25

标签: java mongodb updates

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

1 个答案:

答案 0 :(得分:0)

我相信findAndModify$setupdate条款)是您正在寻找的。