对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

Update Documents

在 MongoDB 中,更新操作包括在一个或多个文档中添加、删除或修改字段。此页面提供示例。

您可以使用以下方法更新 MongoDB 中的文档:


➤ 使用右上角的 Select your language(选择语言)下拉菜单,设置以下示例的语言。


以下示例使用 sample_mflix数据库中的 movies集合。要学习如何将示例数据集加载到部署中,请参阅加载示例数据。

要更新文档, MongoDB提供了字段更新操作符(例如$set)来修改字段值。

要使用更新操作符,请向更新方法传递以下形式的更新文档:

{ <update operator>: { <field1>: <value1>, ... }, <update operator>: { <field2>: <value2>, ... }, ...}

某些更新操作符(例如 $set)会在字段不存在的情况下创建字段。有关详细信息,请参阅相应的更新操作符参考信息。

以下示例使用 movies 集合上的 db.collection.updateOne() 方法来更新 title 等于 "The Godfather" 的第一个文档:

db.movies.updateOne( { title: "The Godfather" }, { $set: { rated: "PG", "tomatoes.viewer.rating": 4.5 }, $currentDate: { lastupdated: true } })

更新操作:

  • 使用 $set 操作符将 size.uom 字段的值更新为 "cm",并将 status 字段的值更新为 "P",

  • 使用 $currentDate 操作符将 lastModified 字段的值更新为当前日期。如果 lastModified 字段不存在,则 $currentDate 将创建该字段。有关详细信息,请参阅 $currentDate。

以下示例使用 db.collection.updateMany() 方法来更新 movies 集合上 num_mflix_comments 大于 100 的所有文档:

db.movies.updateMany( { "num_mflix_comments": { $gt: 100 } }, { $set: { popular: true }, $currentDate: { lastupdated: true } })

要替换除 _id 字段之外的文档的所有内容,请将全新文档作为第二个参数传递给 db.collection.replaceOne()。

替换文档时,替换文档必须仅包含字段/值对。替换文档不能包含更新操作符表达式。

替换文档可以具有与原始文档不同的字段。在替换文档中,您可以省略 _id 字段,因为 _id 字段是不可变的。但是,如果确实包括 _id 字段,则它的值必须与当前值相同。

如下示例将替换 movies 集合中的第一个文档,其中的 title: "The Godfather":

db.movies.replaceOne( { title: "The Godfather" }, { title: "The Godfather", plot: "Updated plot summary", year: 1972, rated: "R", runtime: 175 })

注意

在 MongoDB Atlas 用户界面中,一次只能更新一个文档。要更新多个文档或替换整个文档,请从 mongosh 或 MongoDB 驱动程序连接到您的 Atlas 部署,并按照本页面上的示例选择您的首选方法。

本节中的示例使用的是用品公司示例数据集。要了解如何将示例数据集加载到您的 MongoDB Atlas 部署中,请参阅加载示例数据。

要更新除 MongoDB Atlas 中的文档,请按以下步骤操作:

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Database 标题下的 Clusters。

    会显示集群页面。

2
  1. 对于包含样本数据的集群,单击Browse Collections 。

  2. 在左侧导航窗格中,选择 sample_supplies 数据库。

  3. 选择 sales 集合。

3

您可以在 Filter 字段中指定查询筛选器文档。查询筛选器文档使用查询运算符来指定搜索条件。

将以下查询筛选器文档复制到 Filter 搜索栏,然后单击 Apply:

{ saleDate: { $gte: { $date: "2016-01-01T00:00-00:00" }, $lte: { $date: "2016-01-02T00:00-00:00" } } }

此查询过滤器返回 sample_supplies.sales 集合中 saleDate 等于 UTC 时间 2016 年 1 月 1 日和 2 日之间的任何时间(包含这两个时间)的所有文档。

4

要编辑查询结果中显示的文档,请将鼠标悬停在此文档上,然后单击“铅笔”图标。在文档编辑器中,您可以:

  • 添加新字段。

  • 删除现有字段。

  • 编辑字段的名称、值或类型。

  • 还原特定更改。

有关详细说明,请参阅创建、查看、更新和删除文档。

5

要确认并保存更改,请单击 Update(更新)按钮。

MongoDB 中的所有写入操作在单个文档级别上都是原子性的。有关 MongoDB 和原子性的更多信息,请参阅原子性和事务。

设置后,您将无法更新 _id 字段的值,也无法使用具有其他 _id 字段值的替换文档替换现有文档。

仅将 updateMany() 方法用于 幂等 操作。

对于写入操作,MongoDB 会保留文档字段的顺序,但以下情况除外:

  • _id 字段始终是文档中的第一个字段。

  • 包含字段名称 renaming 的更新可能会导致文档中的字段重新排序。

如果 updateOne()、updateMany() 或 replaceOne() 包含 upsert : true,而且没有任何文档符合指定的筛选条件,此操作将创建并插入一个新文档。如果存在匹配的文档,则该操作会修改或替换匹配的一个或多个文档。

有关创建的新文档的详细信息,请参阅方法的单独参考页面。

对于写关注,您可以指定 MongoDB 请求的写操作确认级别。有关详细信息,请参阅写关注。

选择您的语言
给本页内容打分