文档菜单
文档首页
/
MongoDB Shell
/

更新文档

本页

  • 更新操作符语法
  • 更新单个文档
  • 更新多个文档
  • 替换文档
  • 更新行为
  • 了解更多

MongoDB shell提供以下方法来更新集合中的文档

本页上的示例引用了Atlas 示例数据集。您可以创建一个免费Atlas集群,并用示例数据填充该集群以跟随这些示例。要了解更多信息,请参阅 Atlas入门。

要更新文档,MongoDB提供更新运算符,例如$set,来修改字段值。

要使用更新运算符,将以下形式的更新文档传递给更新方法

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

某些更新运算符,如$set,如果字段不存在则创建该字段。有关详细信息,请参阅各个更新运算符的单独参考。

使用 db.collection.updateOne() 方法来更新与指定过滤器匹配的第一个文档。

注意

MongoDB 保留文档的自然排序顺序。这种排序是一个内部实现特性,您不应依赖于其中任何特定的结构。了解更多信息,请参阅 自然顺序。

示例

更新 sample_mflix.movies 集合中第一个 title 等于 "Twilight" 的文档

use sample_mflix
db.movies.updateOne( { title: "Twilight" },
{
$set: {
plot: "A teenage girl risks everything–including her life–when she falls in love with a vampire."
},
$currentDate: { lastUpdated: true }
})

更新操作

  • 使用 $set 操作符来更新电影 Twilightplot 字段的值。

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

使用 db.collection.updateMany() 来更新所有匹配指定过滤器的文档。

示例

sample_airbnb.listingsAndReviews 集合中所有 security_deposit 小于 100 的文档进行更新

use sample_airbnb
db.listingsAndReviews.updateMany(
{ security_deposit: { $lt: 100 } },
{
$set: { security_deposit: 100, minimum_nights: 1 }
}
)

更新操作使用 $set 操作符将 security_deposit 字段的值更新为 100,并将 minimum_nights 字段的值更新为 1

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

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

替换文档可以有不同的字段与原始文档不同。在替换文档中,可以省略 _id 字段,因为 _id 字段是不可变的;然而,如果包含 _id 字段,它必须与当前值相同。

示例

替换 sample_analytics.accounts 集合中 account_id: 371138 的第一条文档

db.accounts.replaceOne(
{ account_id: 371138 },
{ account_id: 893421, limit: 5000, products: [ "Investment", "Brokerage" ] }
)

运行以下命令以读取您的更新文档

db.accounts.findOne( { account_id: 893421 } )

要了解有关更新文档特定行为的更多信息,请参阅行为。

返回

读取