Bulk.find.update()
提示
MongoDB 还提供了用于执行批量写入操作的 db.collection.bulkWrite()
方法。
说明
Bulk.find.update(<update>)
将
multi
更新操作添加到批量操作列表中。该方法将更新现有文档中的特定字段。使用
Bulk.find()
方法指定用于决定更新哪些文档的条件。Bulk.find.update()
方法会更新所有匹配的文档。要指定单个文档更新,请参阅Bulk.find.updateOne()
。Bulk.find.update()
接受以下参数:Parameter类型说明文档或管道要应用的修改。可以是以下之一:
Update document只包含更新操作符表达式。聚合管道仅包含以下聚合阶段:
$addFields
及其别名$set
有关更新修改参数的更多信息,请参阅
db.collection.updateMany()
参考页面。Bulk.find()
和更新文档中关联<query>
文档的总和必须小于或等于最大 BSON 文档大小。要为该操作指定 upsert: true,请与
Bulk.find.upsert()
一起使用。在Bulk.find.upsert()
中,如果没有符合Bulk.find()
查询条件的文档,更新操作将只插入一个文档。要指定
arrayFilters
来更新特定数组元素,请与Bulk.find.arrayFilters()
一起使用。要指定相关
Bulk.find()
的索引,请参阅Bulk.find.hint()
。要成批替换文档,请参阅
Bulk.find.replaceOne()
。
例子
以下示例将为 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();
使用聚合管道进行更新
更新方法可以接受聚合管道。例如,以下使用:
聚合变量
NOW
,解析为当前日期时间,可以提供与$currentDate
更新操作符表达式相似的行为。要访问聚合变量,在变量前加上双美元符号$$
并用引号引起来。
var bulk = db.items.initializeUnorderedBulkOp(); bulk.find( { status: "P" } ).update( [ { $set: { points: 0, lastModified: "$$NOW" } } ] ); bulk.execute();