参考 > MongoDB CRUD操作 > 更新文件 > 聚合管道更新
从MongoDB 4.2开始,您可以将聚合管道用于更新操作。通过更新操作,聚合管道可以包括以下阶段:
$addFields |
$set |
$project |
$unset |
$replaceRoot |
$replaceWith |
使用聚合管道可以实现更具表达力的更新语句,例如根据当前字段值表达条件更新,或使用另一个字段的值更新一个字段。
您可以在提供的shell中尝试该示例。在外壳内单击以进行连接。连接后,您可以在外壳中运行示例。
创建一个示例students
集合(如果该集合当前不存在,则插入操作将创建该集合):
要验证,请查询集合:
以下db.collection.updateOne()
操作使用聚合管道通过以下方式更新文档:_id: 3
具体来说,管道包含一个$set
阶段,该阶段将test3
字段添加98
到文档中(并将其值设置为),并将modified
字段设置为当前日期时间。对于当前日期时间,该操作将聚合变量NOW
用于(访问变量,在变量前加前缀$$
并用引号引起来)。
要验证更新,您可以查询集合:
您可以在提供的shell中试用示例。在外壳内单击以进行连接。连接后,您可以在外壳中运行示例。
创建一个示例students2
集合(如果该集合当前不存在,则插入操作将创建该集合):
要验证,请查询集合:
以下
db.collection.updateMany()
操作使用聚合管道来标准化文档的字段(即,集合中的文档应具有相同的字段)并更新该
modified
字段:
具体来说,管道包括:
$replaceRoot
与阶段
$mergeObjects
表达为设置默认值quiz1
,quiz2
,test1
和test2
字段。聚合变量ROOT
是指正在修改的当前文档(以访问该变量,使用前缀
$$
和引号引起来)。当前文档字段将覆盖默认值。$set
阶段到更新modified
领域的当前日期时间。对于当前日期时间,该操作将聚合变量NOW
用于(访问变量,在变量前加前缀$$
并用引号引起来)。要验证更新,您可以查询集合:
您可以在提供的shell中试用示例。在外壳内单击以进行连接。连接后,您可以在外壳中运行示例。
您可以在提供的shell中试用示例。在外壳内单击以进行连接。连接后,您可以在外壳中运行示例。
创建一个示例students4
集合(如果该集合当前不存在,则插入操作将创建该集合):
要验证,请查询集合:
以下db.collection.updateOne()
操作使用聚合管道通过以下方式向文档添加测验分数:_id:
2
要验证更新,请查询集合:
您可以在提供的shell中试用示例。在外壳内单击以进行连接。连接后,您可以在外壳中运行示例。
创建一个temperatures
包含摄氏温度的示例集合(如果该集合当前不存在,则插入操作将创建该集合):
要验证,请查询集合:
以下db.collection.updateMany()
操作使用聚合管道以华氏度的相应温度更新文档:
具体来说,管道包括一个$addFields
阶段,以添加一个新的数组字段tempsF
,该字段包含华氏温度。要将tempsC
数组中的每个摄氏温度转换为华氏温度,该阶段使用
$map
带有$add
和的
$multiply
表达式。
要验证更新,您可以查询集合: