温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

更新文档(update)

发布时间:2020-07-07 21:53:34 来源:网络 阅读:2577 作者:梁十八 栏目:关系型数据库

更新文档(update)



修改一条简单文档:

db.getCollection("test").insert(     {         title: "商品购物单1",         amount: 35,         detail: [             {name: "苹果", price: 22},             {name: "面粉", price: 18}         ]     } ); //修改符合条件的一条(插入的,符合条件的最早一条) db.getCollection("test").update(     {         title: "商品购物单1"     },     {         $set: {title: "商品购物单2"}     } );

(update,修改符合条件的一条(插入的,符合条件的最早一条))


更新字段(增加,减少):

db.getCollection("test").update(     {         title: "商品购物单1"     },     {         $inc: {"amount": 5}     } );

(update,修改符合条件的一条(插入的,符合条件的最早一条)。$inc操作符后面的值,可以是正数负数,也可以是小数


改为指定倍数:

db.getCollection("test").update(     {         title: "商品购物单1"     },     {         $mul: {"amount": 2}     } );

(update,修改符合条件的一条(插入的,符合条件的最早一条)。$mul操作符后面的值,可以是正数负数,也可以是小数


更新字段/键名

db.getCollection("test").insert(     {         _id: 66,         titlss: 35,         amount: 50.5,         detail: [             {name: "苹果", price: 22},             {name: "面粉", price: 18}         ]     } ); db.getCollection("test").update(     {         _id: 66     },     {         $rename: {"titlss": "title"}     } );

($rename 操作符。在键名大量出错的情况下尤其有用)


将_id为66,title为35的这一列去掉(其他数据条的title不变)

db.getCollection("test").update(     {         _id: 66     },     {         $unset: {"title": "35"}     } );

更新文档(update)(其他数据条的title不变,title为35的变为N/A)


_id:66文档的amount由50.5修改为50:

db.getCollection("test").update(     {         _id: 66     },     {         $unset: {"title": "35"}     } );

(将$min给出的值与当前文档字段值进行比较,当给定值较小时则修改当前文档值为给定值)


_id:66文档的amount由50修改为50.5:

db.getCollection("test").update(     {         _id: 66     },     {         $max: {"amount": 50.5}     } );

(将$max 给出的值与当前文档字段值进行比较,当给定值较大时则修改当前文档值为给定值)


ISODate时间方法:

db.getCollection("test").insert(     {         _id: 69,         title: "商品购物单6",         amount: 80,         unit: "元",         detail: [             {name: "苹果", price: 22},             {name: "面粉", price: 18}         ],         lasttime: ISODate("2018-07-21 14:53:56")     } );


修改一条文档里的数组和嵌套文档:

db.getCollection("test").insert(     {         _id: 80,         title: "商品购物单80",         amount: 80,         unit: "元",         detail: [             {name: "苹果", price: 22},             {name: "面粉", price: 18}         ],         lasttime: ISODate("2018-07-21 14:53:56"),         overview: {shop: "丁丁电子商务平台", shopno: 5, address:"地球村"}     } );
db.getCollection("test").update(     {         _id: 80     },     {         $set: {             "detail.1": {name: "大米", price: 16},             "overview.address": "某海"         }     } );

更新文档(update)

(MongoDB数组下标从0开始,"detail.1"代表数组第2个元素)

(引用数组或嵌入文档对象时,都需要加""号,如"detail.1","overview.address",中间用点号隔离)

修改数组的内容,要有


默认情况下update命令都执行修改一条文档动作,我们也希望能同时修改所有符合条件的文档记录,这里需要采用multi选项:

db.getCollection("test").update(     {         "detail.name": "面粉",         "detail.price": {$lte: 30}     },     {         $set: {             "detail.1": {name: "面粉", price: 666},             "overview.address": "这里"         }     },     {         multi: true     } );

(将面粉价格小于等于30的记录的detail数组第二个(下标为1)的面粉价格改为40)


find()查询条件操作符,可以用在update操作条件上

db.getCollection("test").update(     {         "detail.name":"面粉", "detail.price": {$lte: 30}     },     {         $set: {             "detail.1": {name:"面粉", price:40}         }     },     {         multi: true //满足条件的都修改     } );


Update命令在特定情况下,可以增加文档的宇段,甚至实现insert命令功能。这个特定条件是要修改的文档没有要修改的字段,而且update命令带upsert选项

db.getCollection("test").update(     {         _id: 80     },     {         $set: {             "detail.1": {name:"面粉", price:10}, //修改后的             danwei: "美元" //新增加字段         }     },     {         upsert: true     } );


writeConcern选项为update修改数据异常时,提供出错处理机制

db.getCollection("test").update(     {         item: ""     },     {         $set: {             title: "测试", price: 50         }     },     {         multi: true,         writeconcern: {w: "majority", wtimeout:3000}     } );

(当update命令在5秒内没有执行完成时,取消该命令操作,并返回错误值)


db.collection.updateOne()。与update()唯一的区别是命令语法里少了一个multi :<boolean>选项, 也就是updateOne()只适用于符合条件的一条文档的修改任务。

db.collection.updateMany()。与update()唯一的区别是命令语法里少了一个multi:<boolean>选项, 也就是updateMany()只适用于符合条件的多条文档的修改任务。

db.collection.replaceOne()。与update()的区别有两处,一个没有multi:<boolean>选项;另外一个在第二个参数Cupdate的<update>)里不能有更新操作符。

更新文档(update)

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI