前言

数据更新是我们日常操作数据库必不可少的一部分,下面这篇文章就给大家分享了操作MongoDB数据更新的一些干货,对大家具有一定的参考学习价值,一起来学习学习吧。
常用的函数
update(<query>,<update>,<upsert>,<multi>) ,其中<query>表示筛选的条件,<update>是要更新的数据updateMany() 更新所有匹配到的数据upsert
upsert是一个布尔类型的数据,如果为true时,当根据query条件没有找到匹配的数据时,就表示插入此条数据,如果为false就表示不插入数据
下面将会在一个空的集合中更新数据
//就会插入此条数据,因为没有找到匹配的信息
db.user.update({'name':'chenjiabing','age':22,'sex':"Man"},{$set:{'hobby':'read'}},{'upsert':true});
db.user.update({'name':'chenjiabing','age':22,'sex':"Man"},{$set:{'hobby':'read'}},true); //和上面的语句等价
//输出 db.user.find()
{ "_id" : ObjectId("59067b70856d5893a687655f"), "age" : 22, "name" : "chenjiabing", "sex" : "Man", "hobby" : "read" }
multi
如果这个参数为true,就把按条件查出来多条记录全部更新。默认为false,如果为true的话和updateMany()一样的效果
下面将会更新所有匹配到的数据
db.user.update({name:'chenjiabing'},{$set:{'hobby':'code'}},{'multi':true});
字段更新操作符 Field Update Operators
$set
$set用来指定一个键的值。如果这个键不存在,则创建它。注意这里的更新默认是只更新第一条匹配到的数据,如果第一条匹配的数据已经满足修改后的条件,那么将不会执行下面匹配的信息
下面我们将会添加一条信息在数据库中
db.user.insert({"name":'jack',"age":22,"sex":'Man','school':{'name':'jsnu','city':'xuzhou'}});
运行下面的代码,将该用户的兴趣设置为“读书”并添加至文档中(此时文档中hobby键是不存在,该条文档就会创建它)
db.user.update({name:'jack'},{$set:{'hobby':'read'}})
下面将会修改用户的年龄
db.user.update({'name':'jack'},{$set:{'age':20}})
下面用$set修改数据类型,将sex设置为1
db.user.update({'name':'jack'},{$set:{'sex':1}})
下面用$set修改内嵌文档,必须指定文档的名字和键值
db.user.update({name:'jack'},{$set:{'school.name':'shida','school.city':'beijing'}})
$unset
从文档中移除指定的键
下面将要删除上面插入的hobby键
db.user.update({name:'jack'},{$unset:{'hobby':1}}) //这里的值是任意给的,随便什么值
$inc
$inc修改器用来增加已有键的值,或者在键不存在时创建一个键$inc就是专门来增加(和减少)数字的。$inc只能用于整数、长整数或双精度浮点数。要是用在其他类型的数据上就会导致操作失败
例如毎次有人访问该博文,该条博文的浏览数就加1,用键pageViews保存浏览数信息。这个键值上面没有定义过,所以会自动创建一个
db.user.update({name:'jack'},{$inc:{'pageViews':1}}); //起初没有就会自动创建一个键
下面演示增加和减少
db.user.update({name:'jack'},{$inc:{'pageViews':100}}) ; //这里是在上面的基础上加上100,此时变成了101
db.user.update({name:'jack'},{$inc:{"pageViews":-100}}) ; //这里是在上面的基础上减去100,此时还是变成了1
$rename
语法: {$rename: { <old name1>: <new name1>, <old name2>: <new name2>, ... } }
$rename操作符可以重命名字段名称,新的字段名称不能和文档中现有的字段名相同。
下面重新插入一条数据,并且改变这条数据的键的名称
db.user.insert({name:'chenjiabing','age':22,'sex':'Man','school':{'name':'jsnu','city':'beijing'}});
db.user.update({name:'chenjiabing'},{$rename:{'age':'Age'}}) //重命名age为Age
下面将要演示怎样改变内嵌文档的键的名称,注意一定要带上文档的名字
db.user.update({name:'chenjiabing'},{$rename:{'school.name':'school.Name','school.city':'school.City'}});
如果重命名的字段字和集合中原有的字段名字相同的话就会覆盖原有的字段名称,那么就会造成数据的丢失
db.user.update({name:'chenjiabing'},{'$rename':{'sex','age'}}); //这里sex变成age和原来的age相同,那么原来的age就会丢失
db.user.find({name:'chenjiabing'});
//输出,可以看到原来的age没有了,变成了覆盖之后的
{ "_id" : ObjectId("590674ce30b9f88dd43d7ee4"), "name" : "chenjiabing", "age" : "Man", "school" : { "name" : "jsnu", "city" : "beijing" } }
如果指定的字段不存在,那么将不会更新,对原来的字段没有影响
db.user.update({name:'chenjiabing'},{$rename:{value:'name'}}); //将不会有任何的改变,因为value这个字段根本不存在
$rename操作符也可以将子文档中键值移到其他子文档中
db.user.update({name:'chenjiabing'},{$rename:{'school.name':'contact.name'}});// 这里将会将school.name这个字段的值移到contact.name之中,如果contact不存在,那么就会创建一个
//输出
{ "_id" : ObjectId("590674ce30b9f88dd43d7ee4"), "name" : "chenjiabing", "age" : "Man", "school" : { "city" : "beijing" }, "contact" : { "name" : "jsnu" } }
数组更新操作符 Array Update Operators
只能用在键值为数组的键上的数组操作。
$ (query)
语法: { "<array>.$" : value }
当对数组字段进行更新时,且没有明确指定的元素在数组中的位置,我们使用定位操作符$标识一个元素,数字都是以0开始的。
注意:
向集合中插入两条数据
db.students.insert({ "_id" : 1, "grades" : [ 78, 88, 88 ] });
db.students.insert({ "_id" : 2, "grades" : [ 88, 90, 92 ] });
执行下列操作
//查询匹配的文档中,数组有2个88,只更新第一个匹配的元素,也就是"grades.1"
db.students.update( { _id: 1, grades: 88 }, { $set: { "grades.$" : 82 } }) ;
//查询文档中没有出现grades字段,查询报错
db.students.update( { _id: 2 }, { $set: { "grades.$" : 82 } } );
$push
如果指定的键已经存在,会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。
下面我们将使用$push对该文档添加一条评论信息。
//将会创建一个comments数组,因为一开始这个数组没有存在
db.user.update({name:'chenjiabing'},{$push:{comments:{'name':'jack','content':'hello thanks'}}})
//继续添加一条,在comments的末尾进行添加,此时comments变成两条数据了
db.user.update({name:'chenjiabing'},{$push:{comments:{'name':'john','content':'hello'}}})
$pull
语法:db.collection.update( { field: <query> }, { $pull: { field: <query> } } );
$pull操作符移除指定字段值为数组,且匹配$pull操作符移除指定字段值为数组,且匹配$pull语句声明的查询条件的所有元素。
执行如下操作
//插入一条文档
db.profiles.insert({ votes: [ 3, 5, 6, 7, 7, 8 ] });
//移除数组中所有元素7
db.profiles.update( { votes: 3 }, { $pull: { votes: 7 } } );
//移除数组中所有大于6的元素
db.profiles.update( { votes: 3 }, { $pull: { votes: { $gt: 6 } } } );
//Result
{ votes: [ 3, 5, 6, 8 ] }
{ votes: [ 3, 5, 6 ] }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# mongodb
# 更新多条数据
# 更新
# mongodb批量更新数据
# mongodb中oplog介绍和格式详析
# mongodb数据库迁移变更的解决方案
# 利用MongoDB中oplog机制实现准实时数据的操作监控
# 剖析后OpLog订阅MongoDB的数据变更就没那么难了
# 就会
# 文档
# 不存在
# 将会
# 创建一个
# 移除
# 是在
# 键值
# 组中
# 第一个
# 基础上
# 重命名
# 变成了
# 两条
# 这篇文章
# 第一条
# 设置为
# 没有找到
# 用在
# 移到
相关文章:
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
制作门户网站的参考文献在哪,小说网站怎么建立?
测试制作网站有哪些,测试性取向的权威测试或者网站?
香港服务器WordPress建站指南:SEO优化与高效部署策略
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何制作算命网站,怎么注册算命网站?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
,想在网上投简历,哪几个网站比较好?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何快速搭建高效可靠的建站解决方案?
如何在宝塔面板中创建新站点?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
高性能网站服务器配置指南:安全稳定与高效建站核心方案
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何在Windows服务器上快速搭建网站?
如何通过服务器快速搭建网站?完整步骤解析
免费ppt制作网站,有没有值得推荐的免费PPT网站?
如何在IIS服务器上快速部署高效网站?
如何获取PHP WAP自助建站系统源码?
建站主机解析:虚拟主机配置与服务器选择指南
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
网站代码制作软件有哪些,如何生成自己网站的代码?
制作网站的基本流程,设计网站的软件是什么?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何用VPS主机快速搭建个人网站?
如何在阿里云域名上完成建站全流程?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何在建站主机中优化服务器配置?
如何获取上海专业网站定制建站电话?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何用景安虚拟主机手机版绑定域名建站?
如何在橙子建站上传落地页?操作指南详解
实例解析angularjs的filter过滤器
购物网站制作公司有哪些,哪个购物网站比较好?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
建站之星如何开启自定义404页面避免用户流失?
XML的“混合内容”是什么 怎么用DTD或XSD定义
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何解决VPS建站LNMP环境配置常见问题?
建站主机如何选?性能与价格怎样平衡?
建站之星24小时客服电话如何获取?
小建面朝正北,A点实际方位是否存在偏差?
高端云建站费用究竟需要多少预算?
如何使用Golang table-driven基准测试_多组数据测量函数效率
制作企业网站建设方案,怎样建设一个公司网站?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
*请认真填写需求信息,我们会在24小时内与您取得联系。