如何在替换整个MongoDB文档的同时更新MongoDB文档?

3
如果我有一个包含两个值的文档:
{
  "name" : "Bob",
  "location" "France"
}

然后将包含“name”和“country”的数组传递给文档。如何确保整个文档已更新并删除了“location”?

我不知道两个文档之间的区别,因此无法取消设置特定字段。我正在寻找一种方法,只需使用提供的数组替换文档数据。


在MongoDB中,不可能只有这两个值的文档 - 它还必须具有一个_id字段,用于唯一标识它。 - Asya Kamsky
1个回答

6
如果您向 `update` 提供一个包含所需记录的新文档,您将替换原有文档。
例如:
db.so.insert({"name":"Bob", "location": "France"})
db.so.update({"name":"Bob", "location": "France"}, {"name":"Roberto", "country":"Italy"})
db.so.find()

{ "_id" : ObjectId(), "name" : "Roberto", "country" : "Italy" }

当然,如果你有文档的_id,那么这将是更好的指定更新的方式(而不是像上面那样传回刚插入的文档)。

那么,要进行完整的更新,我需要传递原始文档数组以及新文档数组吗?我一直只传递新数组,直到现在才意识到它没有删除不在新数组中的字段。 - sterling
你只需要识别文档。在上面的例子中,我通过传回原始文档来实现这一点,从而唯一地标识了该文档。您可以通过传递要更新的现有文档的 _id 来执行相同的操作。请查看有关在 PHP 中进行更新的文档,其中显示了替换更新和仅修改文档部分的更新之间的区别。 - Andre de Frere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接