首页 > 其他分享 >mongo如何使用脚本更新数据

mongo如何使用脚本更新数据

时间:2023-12-21 19:05:43浏览次数:40  
标签:脚本 mongo age db update 更新 chenjiabing user name

前言

数据更新是我们日常操作数据库必不可少的一部分,下面这篇文章就给大家分享了操作MongoDB数据更新的一些干货,对大家具有一定的参考学习价值,一起来学习学习吧。

常用的函数

update(,,,) ,其中表示筛选的条件,是要更新的数据 updateMany() 更新所有匹配到的数据 upsert

upsert是一个布尔类型的数据,如果为true时,当根据query条件没有找到匹配的数据时,就表示插入此条数据,如果为false就表示不插入数据

下面将会在一个空的集合中更新数据

? 1 2 3 4 5 //就会插入此条数据,因为没有找到匹配的信息 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()一样的效果

下面将会更新所有匹配到的数据

? 1 db. user . update ({ name : 'chenjiabing' },{$ set :{ 'hobby' : 'code' }},{ 'multi' : true }); 字段更新操作符 Field Update Operators

$set

$set用来指定一个键的值。如果这个键不存在,则创建它。注意这里的更新默认是只更新第一条匹配到的数据,如果第一条匹配的数据已经满足修改后的条件,那么将不会执行下面匹配的信息

下面我们将会添加一条信息在数据库中

? 1 db. user . insert ({ "name" : 'jack' , "age" :22, "sex" : 'Man' , 'school' :{ 'name' : 'jsnu' , 'city' : 'xuzhou' }}); 运行下面的代码,将该用户的兴趣设置为“读书”并添加至文档中(此时文档中hobby键是不存在,该条文档就会创建它)

? 1 db. user . update ({ name : 'jack' },{$ set :{ 'hobby' : 'read' }}) 下面将会修改用户的年龄

? 1 db. user . update ({ 'name' : 'jack' },{$ set :{ 'age' :20}}) 下面用$set修改数据类型,将sex设置为1

? 1 db. user . update ({ 'name' : 'jack' },{$ set :{ 'sex' :1}}) 下面用$set修改内嵌文档,必须指定文档的名字和键值

? 1 db. user . update ({ name : 'jack' },{$ set :{ 'school.name' : 'shida' , 'school.city' : 'beijing' }}) $unset

从文档中移除指定的键

下面将要删除上面插入的hobby键

? 1 db. user . update ({ name : 'jack' },{mongo如何使用脚本更新数据_MongoDB的使用inc

mongo如何使用脚本更新数据_MongoDB的使用_02inc就是专门来增加(和减少)数字的。$inc只能用于整数、长整数或双精度浮点数。要是用在其他类型的数据上就会导致操作失败

例如毎次有人访问该博文,该条博文的浏览数就加1,用键pageViews保存浏览数信息。这个键值上面没有定义过,所以会自动创建一个

? 1 db. user . update ({ name : 'jack' },{$inc:{ 'pageViews' :1}}); //起初没有就会自动创建一个键 下面演示增加和减少

? 1 2 db. user . update ({ name : 'jack' },{mongo如何使用脚本更新数据_MongoDB的使用_03inc:{ "pageViews" :-100}}) ; //这里是在上面的基础上减去100,此时还是变成了1 $rename

语法: {$rename: { : , : , ... } }

$rename操作符可以重命名字段名称,新的字段名称不能和文档中现有的字段名相同。

下面重新插入一条数据,并且改变这条数据的键的名称

? 1 2 db. user . insert ({ name : 'chenjiabing' , 'age' :22, 'sex' : 'Man' , 'school' :{ 'name' : 'jsnu' , 'city' : 'beijing' }}); db. user . update ({ name : 'chenjiabing' },{$rename:{ 'age' : 'Age' }}) //重命名age为Age 下面将要演示怎样改变内嵌文档的键的名称,注意一定要带上文档的名字

? 1 db. user . update ({ name : 'chenjiabing' },{$rename:{ 'school.name' : 'school.Name' , 'school.city' : 'school.City' }}); 如果重命名的字段字和集合中原有的字段名字相同的话就会覆盖原有的字段名称,那么就会造成数据的丢失

? 1 2 3 4 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" } } 如果指定的字段不存在,那么将不会更新,对原来的字段没有影响

? 1 db. user . update ({ name : 'chenjiabing' },{mongo如何使用脚本更新数据_MongoDB的使用_04rename操作符也可以将子文档中键值移到其他子文档中

? 1 2 3 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)

语法: { ".$" : value }

当对数组字段进行更新时,且没有明确指定的元素在数组中的位置,我们使用定位操作符$标识一个元素,数字都是以0开始的。

注意:

定位操作符(“$”)作为第一个匹配查询条件的元素的占位符,也就是在数组中的索引值。 数组字段必须出现查询文档中。 向集合中插入两条数据

? 1 2 db.students. insert ({ "_id" : 1, "grades" : [ 78, 88, 88 ] }); db.students. insert ({ "_id" : 2, "grades" : [ 88, 90, 92 ] }); 执行下列操作

? 1 2 3 4 //查询匹配的文档中,数组有2个88,只更新第一个匹配的元素,也就是 "grades.1" db.students. update ( { _id: 1, grades: 88 }, { $ set : { "grades.$" : 82 } }) ; //查询文档中没有出现grades字段,查询报错 db.students. update ( { _id: 2 }, { $ set : { "grades.mongo如何使用脚本更新数据_MongoDB的使用_05push

如果指定的键已经存在,会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。

下面我们将使用$push对该文档添加一条评论信息。

? 1 2 3 4 //将会创建一个comments数组,因为一开始这个数组没有存在 db. user . update ({ name : 'chenjiabing' },{mongo如何使用脚本更新数据_MongoDB的使用_06push:{comments:{ 'name' : 'john' , 'content' : 'hello' }}}) $pull

语法:db.collection.update( { field: } } );

mongo如何使用脚本更新数据_MongoDB的使用_07pull操作符移除指定字段值为数组,且匹配$pull语句声明的查询条件的所有元素。

执行如下操作

? 1 2 3 4 5 6 7 8 9 //插入一条文档 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 ] }

标签:脚本,mongo,age,db,update,更新,chenjiabing,user,name
From: https://blog.51cto.com/u_12266412/8925902

相关文章

  • 使用ansible脚本用pt-archiver归档数据
    【背景说明】需要使用ansible来管理删除数据任务,数据量较大,使用pt-archiver工具【环境说明】MySQL主从架构+pt-archiver3.5.5【剧本说明】treeroles/archive_mysql/roles/archive_mysql/├──files│└──percona-toolkit-3.5.5-1.el7.x86_64.rpmpt工具├......
  • python钉钉机器人运维脚本监控实例
    面是关于“Python钉钉机器人运维脚本监控实例”的完整攻略:目录介绍使用步骤配置机器人运行脚本示例说明监控服务器CPU使用率监控服务器磁盘空间总结介绍钉钉机器人是钉钉提供的一种形式化的通信渠道,可以通过代码来调用钉钉机器人的API,实现以机器人的形式向钉钉群组......
  • 以前开发的一些dremio arp 扩展24.3 更新
    以前开发过一些简单的arp扩展(核心还是修改的ce版本的),dremio发布24.3版本了,但是有不少调整,造成以前的不能使用了目前已经将以前开发的都更新了my-dremio-mssql-connector主要是解决中文乱码问题cratedb-dremio-connector支持链接cratedbdremio-mysql-arp调整mysql,使用mysq......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.21)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......
  • 大家现在都是怎么实现热更新的?
    1)大家现在都是怎么实现热更新的2)SLG或者策略游戏的联盟边界线是如何实现的3)实现门窗破碎效果并且性能好的方案4)Screen.SetResolution和UniversalRenderPipelineAsset.renderScale有什么区别这是第366篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技......
  • ​CentOS7一键脚本安装docker并创建ES集群(docker版本)
    CentOS7一键脚本安装docker并创建ES集群(docker版本)说明:1、脚本中修改了默认的docker的存储路径为/data/docker2、脚本中修改了docker默认的网段为10.112.0.1/243、脚本中拉取镜像并安装portainer容器Web管理工具#!/bin/bashsed-i's/enforcing/disabled/g'/etc/selinux/confi......
  • MongoDB限定条件的查询语句
    在MongoDB里面查询语句使用如下:--限定条件进行查询db.getCollection('source_news').find("_id":{$in:[28829497251611,28829497251535,28829497251452,28829497251359,28829497251276,28829497251238,28829497251130,28829497250977,28829497250914,28829497......
  • 记录 | ubuntu源码编译安装/更新boost版本
    一、卸载当前的版本1、查看当前安装的boost版本dpkg-S/usr/include/boost/version.hpp通过上面的命令,你就可以发现boost的版本了,查看结果可能如下:libboost1.54-dev:/usr/include/boost/version.hpp2、删除当前安装的boostsudoapt-getautoremovelibboost1.54-dev这样就可以删......
  • The Missing Semester of Your CS Education----shell工具和脚本
    一.shell脚本1.$的关键字$0-脚本名$1到$9-脚本的参数。$1是第一个参数,依此类推。$@-所有参数$#-参数个数$?-前一个命令的返回值$$-当前脚本的进程识别码!!-完整的上一条命令,包括参数。常见应用:当你因为权限不足执行命令失败时,可以使用sudo!!再尝试一......
  • 腾讯QQ9正式发布!4年来最大更新 安卓/iOS/Windows都能下载了
    12月20日消息,今日,腾讯宣布,QQ9正式上线。距离上一次QQ8版本已经过去了4年。据官方介绍,本次版本更新,QQ9采用了全新的QQNT技术架构驱动,性能升级,交互体验更加流畅。全新界面,流畅社交。首先是UI界面全面优化,QQ启动页、登录页、消息列表页、关于页等页面UI焕彩上线。同时,聊天、设置......