语法
db.collection.update(
<query>, //update的查询条件
<update>, //更新对象文档,含操作符功能使用
{
//可选参数
upsert:<boolean>,
multi:<boolean>,
writeConcern:<document>,
collation:<document>
}
)
用update命令在集合里更新一条或多条文档记录。
db为当前数据库、collection为指定集合名称、update为更新命令。
参数名称 | 说明 |
---|---|
query | update的查询条件,类似SQL update 查询 where字句后面的查询条件 |
update | update的更新对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询set子句后面的更新内容 |
upsert | 可选。如果不存在update的记录,是否插入objNew:true为插入,默认是false,不插入 |
multi | 可选,MongoDB默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来的多条记录全部更新 |
writeConcern | 可选。自定义写出错确认级别 |
collation | 可选。指定特定国家语言的更新归类规则 |
- 更新成功,返回
WriteResult({"nUpdated":n})
对象 - 更新失败:返回结果中会包含
WriteResult.writeConcernError
对象字段内容
修改一条简单文档
先插入一条订单信息,包含名称、数量、明细
更新订单名称为"商品购物单2":
修改某一值用$set
操作符
将数量加5:
显示:amount:35变为amount:40
修改数值,做加法运算。直接用$inc操作符,可以是正数、负数,也可以是小数。
将amount数值翻倍:
显示:amount:40变为amount:80
修改数值,做乘法运算。直接用$mul操作符,可以是正数、负数也可以是小数。
修改键名:
键名从amount变为bmount。
修改错误字段的键名,可以直接用$rename操作符。
删除字段:
bmount字段已经被删除。
删除一个字段,可以用$unset操作符。
$min
$min可以将给出的值与当前文档字段值进行比较,当给定值较小时则修改当前文档值为给定值。
$max
$max可以将给出的值与当前文档字段进行比较,当给定值较大时则修改当前文档值为给定值
修改一条文档里的数组和嵌套文档
对文档里的子文档值进行修改,可以通过主Key.SubKey的组合来实现子我能挡字段对应值的修改;对于数组值的修改,可以通过Key.Number的方式指定修改数组值,Number从0,1…开始,对应数组的第一个、第二个下标…
- MongoDB数组下标从0开始,"detail.1"表示数组第二个元素
- 引用数组或嵌套文档对象时,都需要加"",如"detail.1"、“overview.address”,中间用点号隔离
多文档修改
默认情况下update命令都执行修改一条文档,修改多条文档需要采用multi选项
将面粉价格小于30的记录,修改为40
增加文档字段
Update命令在特定情况下,可以增加文档的字段,甚至实现insert命令功能。这个特定条件是要修改的文档没有要修改的字段,而且update命令带upsert
选项。
简化命令
db.collection.updateOne()
与update()唯一区别是少了multi选项,也就是说该命令只适用与符合条件的一条文档的修改。db.collection.updateMang()
与update()唯一的区别是命令少了multi选项,也就是说该命令 只适用于符合条件的多条文档的修改任务。db.collection.replaceOne()
与update()区别有两处,一个没有multi,另外一个在第二个参数(update)中不能有更新操作符。