Database Manual / Reference / mongosh Methods / Bulk Operations

Bulk.find.updateOne() (mongosh method方法)

Tip

MongoDB also provides the Mongo.bulkWrite() method for performing bulk write operations.MongoDB还提供了Mongo.bulkWrite()方法来执行批量写入操作。

Description描述

Bulk.find.updateOne(<update>)

Adds a single document update operation to a bulk operations list.将单个文档更新操作添加到批量操作列表中。

Use the Bulk.find() method to specify the condition that determines which document to update. 使用Bulk.find()方法指定确定要更新哪个文档的条件。The Bulk.find.updateOne() method limits the update to a single document. Bulk.find.updateOne()方法将更新限制为单个文档。To update multiple documents, see Bulk.find.update().要更新多个文档,请参阅Bulk.find.update()

Bulk.find.updateOne() accepts the following parameter:接受以下参数:

Parameter参数Type类型Description描述
updatedocument or pipeline文件或管道

The modifications to apply. Can be one of the following:要应用的修改。可以是以下之一:

A replacement document替换文件

Contains only field and value pairs.仅包含字段和值对。

See also Bulk.find.replaceOne().另请参见Bulk.find.replaceOne()

Update document更新文档Contains only update operator expressions.仅包含更新运算符表达式
Aggregation pipeline聚合管道

Contains only the following aggregation stages:仅包含以下聚合阶段:

For more information on the update modification parameter, see the db.collection.updateOne() reference page.有关更新修改参数的更多信息,请参阅db.collection.updateOne()参考页面。

The sum of the associated <query> document from the Bulk.find() and the update document must be less than or equal to the maximum BSON document size.来自Bulk.find()的关联<query>文档和更新文档的总和必须小于或等于BSON文档的最大大小

Compatibility兼容性

This command is available in deployments hosted in the following environments:此命令在以下环境中托管的部署中可用:

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud:云中MongoDB部署的完全托管服务

Note

This command is supported in all MongoDB Atlas clusters. 所有MongoDB Atlas集群都支持此命令。For information on Atlas support for all commands, see Unsupported Commands.有关Atlas支持所有命令的信息,请参阅不支持的命令

Behavior行为

If the <update> document contains only update operator expressions, as in:如果<update>文档仅包含更新运算符表达式,如:

{
$set: { status: "D" },
$inc: { points: 2 }
}

Then, Bulk.find.updateOne() updates only the corresponding fields, status and points, in the document.然后,Bulk.find.updateOne()只更新文档中的相应字段、statuspoints

Example示例

The following example initializes a Bulk() operations builder for the items collection, and adds various updateOne() operations to the list of operations.以下示例初始化items集合的Bulk()操作生成器,并将各种updateOne()操作添加到操作列表中。

var bulk = db.items.initializeUnorderedBulkOp();
bulk.find( { status: "D" } ).updateOne( { $set: { status: "I", points: "0" } } );
bulk.execute();

Update with Aggregation Pipeline使用聚合管道进行更新

Update methods can accept an aggregation pipeline. For example, the following uses:更新方法可以接受聚合管道。例如,以下使用:

  • the $set stage which can provide similar behavior to the $set update operator expression,$set阶段可以提供与$set更新运算符表达式类似的行为,
  • the aggregation variable NOW, which resolves to the current datetime and can provide similar behavior to a $currentDate update operator expression. To access aggregation variables, prefix the variable with double dollar signs $$ and enclose in quotes.聚合变量NOW解析为当前日期时间,并可以提供与$currentDate更新运算符表达式类似的行为。要访问聚合变量,请在变量前添加双美元符号$$并括在引号中。
var bulk = db.items.initializeUnorderedBulkOp();
bulk.find( { status: "P" } ).updateOne(
[
{ $set: { points: 0, lastModified: "$$NOW" } }
]
);
bulk.execute();