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

[经验分享] mongoDB数据库

[复制链接]

尚未签到

发表于 2017-12-15 07:18:19 | 显示全部楼层 |阅读模式
  1、mongoDB简介:mongoDB 为非关系数据库,集合(collection)关系数据库中的表,中存储的为json结构的文档,集合中的每一条记录都可以结构不同,
  但必须都有_id字段(mongoDB默认的Object类型的标识)。
  2、mongoDB安装:教程链接:Windows下:http://jingyan.baidu.com/article/d5c4b52bef7268da560dc5f8.html
  Linux下:http://jingyan.baidu.com/article/fd8044faf4f3a95030137a79.html
  3、mongoDB初级查询语句:
mongoDB语句对应的SQL语句新建数据库:use mydb;//新建一个数据库mydbcreate database mydb查看数据库列表:show dbs //mongoDB自带测试数据库  新建集合:db.student.insert({'name':'lily',age:NumberInt('18','sex':'女')})
  插入新的数据,mongoDB自动创建集合,无数据的集合不会显示在列表中
create table student(           >            name varchar(30),            age int,            sex varchar(10),            primary key (id)        )查询全部:db.collection.find();select * from collection;  条件查询:db.collection.find({age:18})
  db.collection.find({'sex':'男'})
  db.collection.find({age:{$gt:18}})
  db.collection.find({age:{$gte:18}})
  db.collection.find({age:{$lt:18}})
  db.collection.find({age:{$lte:18}})
  select * from collection where age=18;
  select * from collection where sex='男';
  select * from collection where age>18;
  select * from collection where age>=18;
  select * from collection where age<18;
  select * from collection where age<=18;
查询数量:db.collection.find({age:18}).count(); select count(*) from collection where age=18; 分页查询:db.collection.find({age:18}).limit(10).skip(5); select * from collection where age=18 limit 5,10; 查询指定字段:db.collection.find({age:18},{name:1}) select name from collection where age=18;插入数据:db.collection.insert({'name':'lucy',age:28}) insert into collection(name,age) values('lucy',28)删除数据:db.collection.drop({'name':'lucy'})delete from collection where name='lucy'更新数据:db.collection.update({'name':'lily'},{$set:{age:19}})update  collection set age=19 where name='lily';模糊条件查询:db.collection.find({'name':/li/})select * from collection where name like %li%;删除集合:db.collection.drop(); drop table collection;  删除数据库 ues mydb
  db.dropDatebase();
  4、mongoDB 高级查询:
  A、聚合:mongoDB 中的aggregate()方法,相当于mysql中的group by。基本语法是:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION);
  eg:db.collection.aggregete([{$match:{age:18}},{$group:{_id:'sex',num:{$sum:1}}}])
  对应SQL:select sex count(*) from collection where age=18 group by sex;
  B、排序:mongoDB 中的sort()方法,相当于mysql中的order by 。
  eg:db.collection.find({'sex':'男'}).sort({age:1});
  对应SQL:select * from collection where sex='男' reder by age ASC
  db.collection.find({'sex':'男'}).sort({age:-1});
  对应SQL:select * from collection where sex='男' reder by age DESC
  C.去重:mongoDB中的distinct()方法去重。
  eg:db.collection.distinct("name")
  对应SQL:select distinct(name) from collection;
  D、执行分析:mongoDB中用explain()分析执行过程。
  eg:db.collection.find({age:18}).explain();
  对应的SQL:explain select * from collection where age=18;
  附:explain参数详解:https://my.oschina.net/foreverhui/blog/639240?p={{totalPage}}
  5、mongoDB 特有查询:
  a、$all匹配所有值
  这个操作和SQL的in类似,但是in只需要满足其中的一个值即可,而$all则需要满足所有值。
  eg:db.collection.find({age:{$all:[20,21]}})
  可以查询出age[20,21,22]但查不出age[20,22,23]即必须同时有20和21。
  b、$in查询包含的值
  这个操作相当于SQL中的in。
  eg:db.collection.find({age:{$in:[20,21]}})
  c、$exists判断字段是否存在
  eg:查询存在age字段的记录
  db.collection.find({age:{$exists:true}})
  查询不存在age字段的记录
  db.collection.find({age:{$exists:false}})
  d、null值的处理
  mongoDB 中的null值处理不仅会返回某一字段为null的记录,还会返回不存在该字段的记录
  eg:db.collection.find({age:null})
  查询结果既有age字段为null的记录还会有不存在age字段的记录。如果需要只查出age字段为null的记录,需要配合$exists
  eg:db.collection.find({age:{'$in':[null],'$exists':true}})
  查询结果为存在age字段且该字段的值为null
  e、$mod取模运算
  eg:db.collection.find({age:{$mod:[5,3]}})
  查询age取模5为3的记录。
  f、$ne不等于操作
  eg:db.collection.find({age:{$ne:18}})
  g、$nin不包含操作
  eg:db.collection.find({age:{$nin:[18,19,20]}})
  查询age不等于 18、19、20的记录。
  h、JavaScript查询和$where查询
  eg:查询年龄大于18的记录有以下四种方式
  条件操作符:db.collection.find({age:{$gt:18}})
  $where 方式:db.collection.find({$where:'this.age>18'})
  内部对象查询:db.collection.find("this.age>18")
  JavaScript查询:func = function(){return this.age>18}
  db.collection.find(func)
  j、存储过程
  创建存储过程:db.system.js.save({_id:'addNum',value:function(x,y){return x+y}})
  查看所有存储过程:db.system.js.find()
  调用存储过程:db.eval("addNum(2,3)")
  同时可以直接用db.eval()创建并调用存储过程
  db.eval(function (){return 2+3;})
  存储过程可以处理数据库内部的操作
  db.system.js.save({_id:"getCount",value:function(){return db.collection.find({age:{$gt:18}}).count()}})
  将collection中age大于18的记录的数量保存在getCount这个存储过程中,调用时db.eval("getCount()")就可以直接得到那个数量

运维网声明 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-424241-1-1.html 上篇帖子: MongoDB的几种同步方式 下篇帖子: mongodb实现对某列求和SUM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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