Docs 菜单
Docs 主页
/
MongoDB Shell
/

Update Documents

在此页面上

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

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 } )

要进一步了解更新文档的具体行为,请参阅行为

后退

读取