//语法
db.collection.update
(
<query>, //查询条件
<update>, //更新文档对象,含操作符功能
{ //可选参数
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>
}
)
返回值:
7. 更新成功,返回WriteResult({“nUpdated”: n})对象
8. 更新失败,返回结果中会包含WriteResult.writeConcernError对象字段内容
商品购物单1 -> 商品购物单2 【$set】
db.order.insert({title:"商品购物单1", amout:35, detail:[{name:"苹果", price:22}, {name:"面粉", price:18}]})
db.order.update({title: "商品购物单1"}, {$set: {title:"商品购物单2"}})
修改商品数量:
$inc
:做加法运算,可以是正数、负数,也可以是小数
db.order.update({title: "商品购物单2"}, {$inc: {amout: 5}})
$mul
:做惩罚运算,可以是正数、负数,也可以是小数
db.order.update({title: "商品购物单2"}, {$mul: {amout: 2}})
修改错误字段的键名:【$rename】
db.order.update({title:"商品购物单2"}, {$rename: {"title": "titleee"}})
删除一个字段:【$unset】
db.order.update({titleee: "商品购物单2"}, {$unset: {titleee: "商品购物单2"}})
比较操作符:【$min】【$max】
将$min给出的值与当前文档字段值进行比较,当给定值较小时则修改当前文档值为给定值
db.order.update({title: "商品购物单2"}, {$min: {amout: 50}})
将$max给出的值与当前文档字段值进行比较,当给定值较大时则修改当前文档值为给定值
db.order.update({title: "商品购物单2"}, {$max: {amout: 50.5}})
db.order.insert(
{
_id: 12,
title: "商品购物单5",
amount: 90,
unit: "元",
detail: [
{name: "葡萄", price: 60},
{name: "面粉", price: 30}
],
lasttime: ISODate("2017-06-03 15:48:55"),
overview: {shop: "钉钉电子商务平台", shopno: 5, address: "地球村"}
}
)
对文档里的子文档值进行修改,可以通过主Key.SubKey的组合来实现指定子文档字段对应值的修改;对于数组值的修改,可以通过Key.Number的方式指定修改数组值,
Number从0,1…开始,对应数组的第一个下标、第二个下标…
db.order.update(
{_id: 12},
{
$set: {
"detail.1": {name:"大米", price: 40},
"overview.address": "北京市"
}
}
)
//注意:引入数组或嵌入文档对象时,都需要加引号"",中间用点号隔离
db.person.update({}, {$set: {age: 20}}, {multi: true})
Update命令在特定情况下,可以增加文档的字段,甚至实现insert命令功能。这个特定条件是要修改的文档没有要修改的字段,而且update命令带upsert选项。
db.person.update(
{name: "jerry"},
{$set: {weight: 66.2}},
{upsert: true}
)
collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean><
normalization <Boolean>
}
MongoDB在3.2版开始提供新的经过简化的3种修改命令。
db.collection.updateOne()
。与update()唯的区别是命令语法里少了一个multi:db.collection.updateMany()
。与update(唯一的区别是命令语法里少了一个multi:db.collection.replaceOne()
。与update()的区别有两处,一个没有multi: