基于过滤器更新集合中的单个文档
db.collection.updateOne( <filter>, <update>, { upsert: <boolean>, arrayFilters: [ <filterdocument1>,...] } )
注:使用 update 更新文档的时候,如果没有使用更新操作符,那么除了 _id 以外,数据被覆盖
基于筛选器更新集合中的多个文档
db.collection.updateMany( <filter>, <update>, { upsert: <boolean>, arrayFilters: [ <filterdocument1>,... ] } )
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, arrayFilters: [ <filterdocument1>,... ] } )
{ <operator1>:{<field1>:<value1>,...}, <operator2>:{<field1>:<value1>,...}, ... }
字段更新操作符 | 说明 |
---|---|
$inc | 将字段的值按指定的量递增。 |
$min | 仅当指定值小于现有字段值时才更新字段。 |
$max | 仅当指定值大于现有字段值时才更新字段。 |
$mul | 将字段的值乘以指定的值 |
$rename | 重命名字段 |
$set | 设置文档中字段的值 |
$unset | 从文档中移除指定的字段 |
注:_id 是不可变的,不能更改。
数组更新操作符 | 说明 |
---|---|
$ | 充当占位符,用于更新与查询条件匹配的第一个元素。 |
$[] | 充当占位符,用于更新匹配查询条件的文档数组中的所有元素。 |
$[identifier] | 充当占位符,用于更新与查询条件匹配的文档的arrayFilters条件匹配的所有元素。 |
$addToSet | 只在集合中不存在的情况下向数组中添加元素。 |
$pop | 删除数组的第一项或最后一项。 |
$pull | 删除与指定查询匹配的所有数组元素。 |
$push | 将元素添加到数组中。 |
$pullAll | 从数组中删除所有匹配的值。 |
$addToSet 语法
{ $addToSet: { <field1>: <value1>, ... } }
$pop 语法
{ $pop: { <field>: <-1 | 1>, ... } }
$pop 操作符删除数组的第一个或最后一个元素。向 $pop 传递一个值 -1 来删除数组中的第一个元素,1 来删除数组中的最后一个元素。
$push 语法
{ $push: { <field1>: <value1>, ... } }
$push 可以添加相同的元素
$pull 语法
$pull 操作符从现有数组中删除一个值或匹配指定条件的值的所有实例
{ $pull: { <field1>: <value|condition>,<field2>: <value|condition>, ... } }
$pullAll 语法
{ $pullAll: { <field1>: [ <value1>,<value2> ... ], ... } }
$ 语法
位置 $ 操作符充当与查询文档匹配的第一个元素的占位符,数组字段必须作为查询文档的一部分出现。
{ "<array>.$" : value }
$[] 语法
{ <update operator>: { "<array>.$[]" : value } }
$[identifier] 语法
{ <update operator>: { "array>.$[<identifier>]" : value } },{ arrayFilters: [ { <identifier>:<condition> } ] }
修改器 | 说明 |
---|---|
$each | 修改 $push 和 $addToSet 操作符,为数组更新添加多个元素。 |
$position | 修改 $push 操作符以指定要添加元素的数组中的位置。 |
$slice | 修改 $push 操作符以限制已更新数组的大小。 |
$sort | 修改 $push 操作符以对存储在数组中的文档重新排序。 |
$ each 语法
{ $addToSet: { <field>: { $each: [<value1>, <value2> ... ] } } }
$position 语法
要使用 $position 修饰符,它必须与 $each 修饰符一起出现。
{$push: {<field>: {$each: [ <value1>, <value2>, ...],$position: <num>}}}
$slice 语法
要使用 $slice 修饰符,它必须与 $each 修饰符一起出现。您可以向 $each 修饰符传递一个空数组[ ],这样只有 $slice 修饰符具有效果。
{$push: {<field>: {$each: [ <value1>,],$slice: <num>}}}
$sort 语法
要使用 $sort 修饰符,它必须与 $each 修饰符一起出现。您可以向 $each 修饰符传递一个空数组[],这样只有 $sort 修饰符具有效果。
{$push: {<field>: {$each: [ <value1>,<value2>,...],$sort: <sort specification>}}}