Update Documents
MongoDB shell 提供下列方法以更新集合中的文档:
要更新单个文档,请使用
db.collection.updateOne()
。要更新多个文档,请使用
db.collection.updateMany()
。要替换文档,请使用
db.collection.replaceOne()
。
本页的示例参考了 Atlas 示例数据集。您可以创建一个免费的 Atlas 集群,并用示例数据填充该集群,以遵循这些示例。要了解更多信息,请参阅开始使用 Atlas。
更新操作符语法
要更新文档,MongoDB 提供了更新操作符(如 $set
)来修改字段值。
要使用更新操作符,请向更新方法传递以下形式的更新文档:
{ <update operator>: { <field1>: <value1>, ... }, <update operator>: { <field2>: <value2>, ... }, ... }
更新单份文档
使用 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
操作符更新电影Twilight
的plot
字段的值。使用
$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 } )
更新行为
要进一步了解更新文档的具体行为,请参阅行为。
了解详情
要了解如何使用聚合管道更新文档,请参阅使用聚合管道进行更新。
要查看更新文档的所有可用方法,请参阅更新方法。