Bulk.find.update()
On this page本页内容
Starting in version 3.2, MongoDB also provides the 从3.2版本开始,MongoDB还提供了db.collection.bulkWrite() method for performing bulk write operations.db.collection.bulkWrite()方法来执行批量写入操作。
Description描述
Bulk.find.update(<update>)-
Adds a将multiupdate operation to a bulk operations list.multi更新操作添加到批量操作列表中。The method updates specific fields in existing documents.该方法更新现有文档中的特定字段。Use the使用Bulk.find()method to specify the condition that determines which documents to update.Bulk.find()方法指定确定要更新哪些文档的条件。TheBulk.find.update()method updates all matching documents.Bulk.find.update()方法更新所有匹配的文档。To specify a single document update, see要指定单个文档更新,请参阅Bulk.find.updateOne().Bulk.find.updateOne()。Bulk.find.update()accepts the following parameter:接受以下参数:Parameter参数Type类型Description描述updatedocument or pipeline The modifications to apply. Can be one of the following:要应用的修改。可以是以下内容之一:Update document更新文档Contains only update operator expressions.仅包含更新运算符表达式。Aggregation pipeline聚合管道
Starting in MongoDB 4.2在MongoDB 4.2中启动
Contains only the following aggregation stages:仅包含以下聚合阶段:$addFieldsand its alias及其别名$set$projectand its alias及其别名$unset$replaceRootand its alias及其别名$replaceWith.
For more information on the update modification parameter, see the有关更新修改参数的更多信息,请参阅db.collection.updateMany()reference page.db.collection.updateMany()参考页。The sum of the associated<query>document from theBulk.find()and the update document must be less than or equal to the maximum BSON document size.Bulk.find()中关联的<query>文档和更新文档的总和必须小于或等于BSON文档的最大大小。To specify an upsert: true for this operation, use with要为此操作指定Bulk.find.upsert(). WithBulk.find.upsert(), if no documents match theBulk.find()query condition, the update operation inserts only a single document.upsert: true,请与Bulk.find.upsert()一起使用。使用Bulk.find.upsert(),如果没有文档与Bulk.find()查询条件匹配,则更新操作只插入单个文档。To specify要指定arrayFiltersto update specific array elements, use withBulk.find.arrayFilters().arrayFilters来更新特定的数组元素,请与Bulk.find.arrayFilters()一起使用。To specify the index to use for the associated要指定用于关联Bulk.find(), seeBulk.find.hint().Bulk.find()的索引,请参阅Bulk.find.hint()。To replace a document wholesale, see要批量替换文档,请参阅Bulk.find.replaceOne().Bulk.find.replaceOne()。
Example实例
The following example initializes a 以下示例初始化Bulk() operations builder for the items collection, and adds various multi update operations to the list of operations.items集合的Bulk()操作生成器,并将各种multi更新操作添加到操作列表中。
var bulk = db.items.initializeUnorderedBulkOp();
bulk.find( { status: "D" } ).update( { $set: { status: "I", points: "0" } } );
bulk.find( { item: null } ).update( { $set: { item: "TBD" } } );
bulk.execute();
Update with Aggregation Pipeline使用聚合管道更新
Starting in version 4.2, update methods can accept an aggregation pipeline. 从4.2版本开始,更新方法可以接受聚合管道。For example, the following uses:例如,以下使用:
the可以提供与$setstage which can provide similar behavior to the$setupdate operator expression,$set更新运算符表达式类似的行为的$set阶段,the aggregation variable聚合变量NOW, which resolves to the current datetime and can provide similar behavior to a$currentDateupdate 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" } ).update(
[
{ $set: { points: 0, lastModified: "$$NOW" } }
]
);
bulk.execute();