更新文档
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 } )
更新行为
要了解有关更新文档特定行为的更多信息,请参阅行为。