更新文件
MongoDB shell 提供了以下方法来更新集合中的文档:
- 要更新单个文档,请使用
db.collection.updateOne()
. - 要更新多个文档,请使用
db.collection.updateMany()
. - 要替换文档,请使用
db.collection.replaceOne()
.
此页面上的示例参考了Atlas 样本数据集. 您可以创建一个免费的Atlas 集群并使用示例数据填充该集群以跟随这些示例。要了解更多信息,请参阅 开始使用Atlas。
更新运算符语法
要更新文档,MongoDB 提供 update operators, 例如$set
, 修改字段值。
要使用更新运算符,请将以下形式的更新文档传递给更新方法:
{
<update operator>: { <field1>: <value1>, ... },
<update operator>: { <field2>: <value2>, ... },
...
}
一些更新操作符,例如$set
, 如果该字段不存在则创建该字段。看个人 更新操作员详情参考。
更新单个文档
使用db.collection.updateOne()
更新第一个 与指定过滤器匹配的文档的方法。
笔记:
MongoDB 保留文档的自然排序顺序。此排序是一项内部实现功能,您不应依赖其中的任何特定结构。要了解更多信息,请参阅 natural order。
例子:
要更新集合中的第一个文档
sample_mflix.movies
,其中title
equals"Tag"
:use sample_mflix db.movies.updateOne( { title: "Tag" }, { $set: { plot: "One month every year, five highly competitive friends hit the ground running for a no-holds-barred game of tag" } { $currentDate: { lastUpdated: true } } })
更新操作:
- 使用
$set
运算符更新plot
电影字段的值Tag
。- 使用
$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()
.
替换文档时,替换文档必须仅包含字段/值对。不包括update operators表达式。
替换文档可以具有与原始文档不同的字段。在替换文档中,您可以省略该_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 } )
更新行为
要了解有关更新文档的特定行为的更多信息,请参阅行为。
了解更多
- 要了解如何使用聚合管道更新文档,请参阅 使用聚合管道进行更新。
- 要查看更新文档的所有可用方法,请参阅 更新方法。
翻译:韩鹏帅