参考 > 参考 > mongo Shell方法 > 收集方法 > db.collection.updateMany()
db.collection.
updateMany
(filter,update,options )¶mongo
壳法
此页面记录了mongo
shell方法,并且
没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的
MongoDB驱动程序文档。
3.2版中的新功能。
更新与集合的指定过滤器匹配的所有文档。
该updateMany()
方法具有以下形式:
该updateMany()
方法采用以下参数:
参数 | 类型 | 描述 | ||||
---|---|---|---|---|---|---|
过滤 | 文献 |
指定一个空文档以更新集合中的所有文档。 |
||||
更新 | 文件或管道 | 要应用的修改。可以是以下之一:
要使用替换文档进行更新,请参阅
|
||||
upsert |
布尔值 | 可选的。当
为避免多次更新,请确保 默认为 |
||||
writeConcern |
文献 | 可选的。表达书面关切的文件。省略使用默认的写关注。 如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。 |
||||
collation |
文献 | 可选的。 指定 用于操作的排序规则。 归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。 排序规则选项具有以下语法: 指定排序规则时,该 如果未指定排序规则,但是集合具有默认排序规则(请参阅参考资料 如果没有为集合或操作指定排序规则,则MongoDB使用先前版本中使用的简单二进制比较进行字符串比较。 您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。 3.4版的新功能。 |
||||
arrayFilters |
数组 | 可选的。筛选器文档数组,用于确定要对数组字段进行更新操作要修改的数组元素。 在更新文档中,使用 注意 在 您可以在更新文档中多次包含相同的标识符;但是,对于 但是,您可以在单个过滤器文档中的相同标识符上指定复合条件,例如以下示例: 有关示例,请参阅为数组更新操作指定arrayFilters。 3.6版的新功能。 |
||||
暗示 | 文件或字串 |
该选项可以采用索引规范文档或索引名称字符串。 如果指定的索引不存在,则操作错误。 有关示例,请参阅为更新操作指定提示。 4.2.1版中的新功能。 |
updateMany()
filter
使用update
条件应用修改来更新集合中与匹配的所有匹配文档。
如果和没有文档匹配,则
根据和参数创建一个新文档。upsert: true
filter
db.collection.updateMany()
filter
update
如果在分片集合上指定,则必须在中包含完整的分片密钥。有关其他
行为,请参见分
片集合。upsert: true
filter
db.collection.updateMany()
请参阅 使用Upsert更新多个文档。
从MongoDB 4.2开始,该db.collection.updateMany()
方法可以接受指定要执行的修改的聚合管道 。管道可以包括以下阶段:[ <stage1>, <stage2>, ... ]
$addFields
及其别名 $set
$project
及其别名 $unset
$replaceRoot
及其别名$replaceWith
。使用聚合管道可以实现更具表达力的更新语句,例如根据当前字段值表达条件更新,或使用另一个字段的值更新一个字段。
例如:
有关示例,请参见使用聚合管道更新。
如果更新操作更改了文档大小,则该操作将失败。
对于db.collection.updateMany()
包含分片集合并在分片集合上的操作,
必须在中包含完整的分片键。upsert: true
filter
db.collection.updateMany()
可以在多文档交易中使用。
如果该操作导致upsert,则该集合必须已经存在。
如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见 生产注意事项。
该restaurant
集合包含以下文档:
以下操作将更新所有violations
大于4
并$set
带有标记供审核的文档:
该操作返回:
现在,该集合包含以下文档:
如果未找到匹配项,则该操作返回:
如果找不到匹配项,设置将插入一个文档。upsert: true
从MongoDB 4.2开始,db.collection.updateMany()
可以使用聚合管道进行更新。管道可以包括以下阶段:
$addFields
及其别名 $set
$project
及其别名 $unset
$replaceRoot
及其别名$replaceWith
。使用聚合管道可以实现更具表达力的更新语句,例如根据当前字段值表达条件更新,或使用另一个字段的值更新一个字段。