在版本4.2中进行了更改。
该update
命令具有以下语法:
该命令包含以下字段:
领域 | 类型 | 描述 |
---|---|---|
update |
串 | 目标集合的名称。 |
updates |
数组 | 一个或多个要在指定集合上执行的更新语句的数组。有关更新语句的详细信息,请参见更新语句。 |
ordered |
布尔值 | 可选的。如果为true ,则当更新语句失败时,不执行其余的更新语句就返回。如果为false ,则更新失败时,请继续其余的更新语句(如果有)。默认为true 。 |
writeConcern |
文献 | 可选的。表示命令写关注点
的文档 如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。 |
bypassDocumentValidation |
布尔值 | 可选的。允许 3.2版中的新功能。 |
updates
数组的每个元素都是一个更新语句文档。每个文档包含以下字段:
领域 | 类型 | 描述 |
---|---|---|
q | 文献 | |
ü | 文件或管道 | 要应用的修改。 该值可以是:
有关详细信息,请参见行为。 |
上升 | 布尔值 | 可选的。如果为 |
multi |
布尔值 | 可选的。如果为true ,则更新所有符合查询条件的文档。如果为
false ,则将更新限制为一个符合查询条件的文档。默认为false 。 |
collation |
文献 | 可选的。 指定 用于操作的排序规则。 归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。 排序规则选项具有以下语法: 指定排序规则时,该 如果未指定排序规则,但是集合具有默认排序规则(请参阅参考资料 如果没有为集合或操作指定排序规则,则MongoDB使用先前版本中使用的简单二进制比较进行字符串比较。 您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。 3.4版的新功能。 |
arrayFilters |
数组 | 可选的。筛选器文档的数组,用于确定针对数组字段的更新操作要修改哪些数组元素。 在更新文档中,使用 注意 在 您可以在更新文档中多次包含相同的标识符;但是,对于 但是,您可以在单个过滤器文档中的相同标识符上指定复合条件,例如以下示例: 有关示例,请参阅为数组更新操作指定arrayFilters。 3.6版的新功能。 |
暗示 | 文件或字串 |
该选项可以采用索引规范文档或索引名称字符串。 如果指定的索引不存在,则操作错误。 有关示例,请参阅为更新操作指定提示。 4.2版中的新功能。 |
更新语句字段u字段可以接受替换文档,即该文档仅
包含field:value
表达式。例如:
然后,该update
命令用更新文档替换匹配的文档。该update
命令只能替换单个匹配的文档。即该multi
字段不能为true
。该update
命令不会替换该
_id
值。
从MongoDB 4.2开始,更新语句字段u字段可以接受一个聚合管道 ,该聚合管道指定要执行的修改。管道可以包括以下阶段:[ <stage1>, <stage2>, ... ]
$addFields
及其别名 $set
$project
及其别名 $unset
$replaceRoot
及其别名$replaceWith
。使用聚合管道可以实现更具表达力的更新语句,例如根据当前字段值表达条件更新,或使用另一个字段的值更新一个字段。
例如:
有关示例,请参见使用聚合管道更新。
对于updates
数组中的每个update元素,查询和更新大小(即q
和u
)的总和必须小于或等于。maximum BSON document size
updates
数组中update语句的总数必须小于或等于。maximum bulk size
要使用update
具有上分片收集,multi: false
_id
字段上包括等式匹配项或以单个分片为目标(例如,通过包含分片键)。从MongoDB 4.2开始,除非分片键字段是不可变_id
字段,否则您可以更新文档的分片键值。有关更新分片键的详细信息,请参阅“ 更改文档的分片键值”。
在MongoDB 4.2之前,文档的分片键字段值是不可变的。
要用于update
更新分片键:
multi: false
使用更新运算符仅更新文档的指定字段。
例如,members
使用以下文档创建一个集合:
以下命令使用$set
和$inc
更新操作符来更新等于的文档的status
和points
字段:member
"abc123"
因为<update>
文档未指定可选multi
字段,所以即使有多个文档符合q
匹配条件,更新也只会修改一个文档。
返回的文档表明该命令找到并更新了一个文档。该命令返回:
有关详细信息,请参见输出。
命令后,集合包含以下文档:
使用更新运算符可仅更新文档的指定字段,并在update语句中包括multi
设置为的字段
true
。
例如,一个members
集合包含以下文档:
以下命令使用$set
和$inc
更新操作符分别修改集合中所有文档的status
和points
字段:
此更新会修改与该q
字段中指定
的查询匹配的所有文档,即与集合中所有文档匹配的空查询。
返回的文档表明该命令找到并更新了多个文档。对于副本集,命令返回:
有关详细信息,请参见输出。
命令后,集合包含以下文档:
从MongoDB 4.2开始,该update
命令可以使用聚合管道进行更新。管道可以包括以下阶段:
$addFields
及其别名 $set
$project
及其别名 $unset
$replaceRoot
及其别名$replaceWith
。使用聚合管道可以实现更具表达力的更新语句,例如根据当前字段值表达条件更新,或使用另一个字段的值更新一个字段。