设为首页 收藏本站
查看: 1300|回复: 0

[经验分享] MongoDB(2): 增删改操作

[复制链接]

尚未签到

发表于 2018-10-25 09:14:40 | 显示全部楼层 |阅读模式
  附加命令:
  1、进入前端操作命令
./mongo [ip:端口]  说明:默认会自动选本地,端口27017
  2、显示所有的库
> show dbs;   或者 show databases;  3、选择库
> use 库名;  4、显示库所有的集合
> show collections;  或者 show tables;  5、显示当前使用的库
> db;  一、操作数据库、文档
  1.1、数据库操作
  1、创建数据库:MongoDB没有专门创建数据库的语句,可以使用“use” 来使用某个数据库,如果要使用
  的数据库不存在,那么将会创建一个,会在真正向该库加入文档后,保存成为文件。
> use db_test;  2、删除数据库,命令:db.dropDatabase(),注意先要进入到需删除的库
> use db_test;  
switched to db db_test
  
> db.dropDatabase();
  
{ "ok" : 1 }
  
>
  1.2、集合操作
  1、创建集合:在MongoDB中不用创建集合,因为没有固定的结构,直接使用db.集合名称.命令 来操作就可以了。如果非要显示创建集合的话,用:db.createCollecion(“集合名称”);
  2、删除集合,命令:dorp
> db.test1.drop();  1.3、查看集合的状态信息
  db.集合名.stats();
  二、增删改
  2.1、添加
  db.集合名称.insert(数据);
> db.test1.insert({"username":"zhangsan",age:2});
DSC0000.jpg

  insert方法,可以单独插入一个文档,也可以插入多个,用“[ ]”即可。注意:
  1:MongoDB会为每个没有“_id”字段的文档自动添加一个”_id”字段
  2:每个Doc必须小于16MB
  3:可以在shell中执行Object.bsonsize(文档名称);来查看size大小
DSC0001.jpg

  2.2、删除
  命令:remove,可以按条件来删除
  只是删除文档,集合还在,如果使用 drop命令,会连带集合和索引都删掉
> db.test1.remove({age:2});  注意:如果使用remove没有带条件,则会删除此集合中所有的文档。
  2.3、更新
  db.集合名称. update(条件,新的文档[,boolean,boolean]);
> db.test1.update({"userId":"1"},{"userId":"1","username":"zhangsan","age":10});
DSC0002.jpg

  问题:
  1、这里如果有多个文档匹配,只会更新第一个文档。
  2、这个修改的是整个文档
  解决:
  使用修改器
  更新修改器,用来做复杂的更新操作
  1:$set :指定一个字段的值,如果字段不存在,会创建一个
> db.test1.update({"userId":"1"},{"$set":{"username":"zhangsan"}},0,1);  说明:如果userId为1,则更新其username为zhangsan
DSC0003.jpg

> db.test1.update({"userId":"1"},{$set:{"score.1":7}});  说明:更新数组score的索引为1的值为7,索引从0开始。
  2:$unset :删掉某个字段
> db.test1.update({"userId":"1"},{"$unset":{"username":1}},0,1);  3:$inc :用来增加已有键的值,如果字段不存在,会创建一个。只能用于整型、长整型、或双精度浮点型的值。
> db.test1.update({"userId":"1"},{"$inc":{"age":3}},0,1);  说明:如果userId为1,则将其age的值增加3
  4:$push:向已有数组的末尾加入一个元素,要是没有就新建一个数组
> db.test1.update({"userId":"1"},{"$push":{"score":1}},0,1);
DSC0004.jpg

  5:$each:通过一次$push来操作多个值
> db.test1.update({"userId":"1"},{"$push":{"score":{$each:[4,5,6]}}},0,1);
DSC0005.jpg

  6:$slice:限制数组只包含最后加入的n个元素,其值必须是负整数
> db.test1.update({"userId":"1"},{"$push":{"score":{$each:[7,8,9],$slice:-5}}});
DSC0006.jpg

  7:$sort:对数组中的元素,按照指定的字段来对数据进行排序(1为升序,-1为降序),然后再按照slice删除。
  注意:不能只将$slice或者$sort与$push配合使用,且必须使用$each
> db.test1.update({"userId":"1"},{"$push":{"score":{$each:[1,2,3],$slice:-5,$sort:-1}}});
DSC0007.jpg

  8:$ne:判断一个值是否在数组中,如果不在则添加进去
> db.test1.update({"userId":"1","score":{$ne:4}},{$push:{"score":4}});
DSC0008.png

  9:$addToSet:将数组作为数据集使用,以保证数组内的元素不会重复
> db.test1.update({"userId":"1"},{$addToSet:{"score":8}});  10:$pop :从数组一端删除元素,{$pop:{key:1}},从末尾删掉一个,-1则从头部删除
> db.test1.update({"userId":"1"},{$pop:{score:1}});  11:$pull:按照条件来删除所有匹配的元素
> db.test1.update({"userId":"1"},{$pull:{score:7}});  12:$:用来修改第一个匹配的元素
> db.test1.update({"score.0":5},{$set:{"score.$":7}});  说明:如果score的第0个索引值为5,则更新score的第0个索引值为7
  三、补充方法
  3.1、save方法
  如果文档存在就更新,不存在就新建,主要根据”_id”来判断。
  添加:
DSC0009.jpg

  更新:
DSC00010.jpg

  3.2、upsert方法
  找到了符合条件的文档就更新,否则会以这个条件和更新文档来创建一个新文档。
  指定update方法的第三个参数为true,可表示是upsert
DSC00011.jpg

  3.3、更新多个文档
  MongoDB默认只更新符合条件的第一个文档,要更新所有匹配的文档,把第4个参数
  设置为true。注意:
  1:只能用在$XXX的操作中
  2:最好每次都显示的指定update的第4个参数,以防止服务器使用默认行为
  3.4、查询更新了多少个文档
  使用命令:getLastError ,返回最后一次操作的相关信息,里面的n就是更新的文
  档的数量。形如:db.runCommand({"getLastError":1});
DSC00012.png




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626173-1-1.html 上篇帖子: CAP理论与MongoDB一致性、可用性的一些思考 下篇帖子: MongoDB(3): 查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表