引言
这篇mongodb的笔记,其中包括mongodb的介绍、安装、Windows下的一些命令方法,以及和java整合的一案例demo有兴趣的可以学习交流一下。
mongodb简介
mongodb是一个非关系型数据库,存储量大是PB级别(1024T = 1PB),在建立所有的情况下查询速度较快,适用于现在的互联网项目开发。
首先附上mongodb的安装包下载地址其中包括windows和linux的两个安装包:https://pan.baidu.com/s/1aZpgDIXCAG-voMZY9uMMSw,
安装步骤
以Windows为例,直接解压Windows版本,在你的盘目录在创建一个叫mongo的文件夹,在这个文件夹里面建立一个叫db的文件夹,用来存放安装程序,在建立一个log的txt用来存放日志,
开始安装,找到cmd用管理员的身份启动,切换到你的mongodb的安装目录,即bin目录找到,mongod.exe(安装程序)
输入命令:mongod.exe --dbpath=d:/mongo/db/ --logpath=d:/mongo/log.txt --install出现 all output going ......表示安装成功,
此时去你的电脑的服务下面能找到一个mongodb的服务开启一下,然后回到的你cmd下面,在bin目录下面执行mongo.exe,此时出现你的mongodb的version的版本应该是2.0.3此时安装完成。
如果安装失败要重新安装,首先要把电脑服务下在mongodb服务关掉然后在去cmd中输入卸载命令:
mongod.exe --dbpath=d:/mongo/db/ --logpath=d:/mongo/log.txt --remove 在输入安装命令进行重新安装。
使用mongodb
1)创建一个数据库 命令use modelmongodb (mongodb不同于关系型数据库的是,他没有表结构,他采用是集合collection存储,存储的是bson的数据,(类json的数据))
2)插入数据三种数据格式
插入普通数据命令 ① db.goods.insert({name:'xiaomi',price:2000,number:'50'})
插入具有对象数据命令 ② db.goods.insert({name:'xiaomi',price:2000,number:'50',
area:{province:'jiangsu',city:'nanjing'}})
插入数组数据命令 ③
db.goods.insert({name:'xiaomi',price:2000,number:'50',
area:{province:'jiangsu',city:'nanjing'},color:['black','red','greed']})
(插入事注意语法,用({})包起来,int类型赋值不要加引号,字符串赋值要加引号,单引号和双引号都可以,推荐使用单引号,因为双引号在一些编辑器中转义会有一些问题)
3)查询数据
①查询所有数据 命令:db.goods.find()
①查询单挑数据数据 命令:db.goods.findOne() ---这个方法是返回你查询数据中多条的第一条
③条件查询命令
1)单条件查询 db.goods.find({nme:xiaomi})或者db.goods.findOne({nme:xiaomi}),
2)多条件查询 db.goods.find({nme:xiaomi,price:2000})或者db.goods.findOne({nme:xiaomi,price:200}),(条件可以传多个根据自己的实际需求)
3)条件查询的$gt--大于,$lt--小于,$gte--大于等于,$lte--小于等于
案例:查询价格大于2000的手机
上命令:db.goods.find({price:{'$gt',2000}}),其他命令根据需求模仿编写
4)$or或者条件的使用,满足一个条件即可
上命令:db.goods.find({'$or':[{name:xiaomi},{price:2000}]})
5)以上查询都是查询整体数据的全部字段,
①如果只想查询某些字段用1或0修饰,1:表示输出,0表示不输出
//这里我只想查出小米手机名称和价格 上命令:db.goods.find({name:1,price:1})
②或者不想查询某些字段
//只想看见手机的其他信息,但是不想看见手机的数量 上命令:db.goods.find({number:0})
注意:
①要么命令中保存要么输出,要么不输出,不允许出现,即输出某些值,又不输出某些值,会报错,
② 但是这里有一个特例:在查询的时候会自动给我添加一个_id字段,这个主键id,可以和其他输出字段一起使用,当对其他字段进行查询操作时,_id可以设置成1或0,这样不会有影响,不会报错。
4)修改数据 update
1) //如果使用了$set,那么修改的是将会是属性的值----这里是将name的xiaomi修改成xiaomimax
话不多说上命令:db.goods.update({name:xiaomi},{'$set':{nama:xiaomimax}})
2)//如果没有使用$set,那么在修改这个属性的时候,其他的属性和值将会被删除,_id除外
这里是将xiaomi修改成xiaomimax的同时将其他字段都删除了
话不多说上命令:db.goods.update({name:xiaomi},{nama:xiaomimax})
3)//如果修改的是字段存在则修改,不存在的话会添加新的字段
话不多说上命令:db.goods.update({name:xiaomimax},{nama:xiaomimin,size:5.5})
5 删除字段
1)删除整体数据
命令:db.goods.remove({name:xiaomi})
2 )删除某条数据的某个字段
命令:db.goods.remove({name:xiaomi},{'$unset':{name:1}})
或者db.goods.remove({name:xiaomi},{'$unset':{name:0}})
注意:这里的0和1没区别,有待考证,
其他命令
1)创建一个数据库 : use datename, 显示所有的数据库:show dbs,
删除一个数据库,要先切换到该数据库下 执行:db.dropDatebase()
2)创建一个集合: db.createCollection('monCollection',options) options是一些参数的配合,可以选择默认不加,具体有
db.createCollection("mycol", { capped : true, autoIndexId : true, size :
6142800, max : 10000 } )
一般在插入数据的时候会为我们创建一个集合,如下此时集合就是:mycol2
db.mycol2.insert({name:'我爱duoduobao'})
3)limit()方法和skip()方法的使用
①limit()表示查询多少条
上命令:db.goods.find().limit(20) 表示查前20条数据
②skip()表示从跳过第多少条之后开始查,默认从0开始
上命令:db.goods.find().skip(9) 表示从第十条开始查以后的所有数据
拓展:实际场景的应用分页查询
上命令:db.goods.find().skip(19).limit(40) 表示从第二十条开始查,往后查40条数据
4)sort()排序方法的使用
1)sort()排序方法使用排序字段和排序参数的方式,来控制升序或降序其中 1表示升序,-1表示将序
上命令:db.goods.find().sort({name:1}) 实现按照名称进行升序排序
拓展:sort()和limit()以及skip()组合使用
上命令:db.goods.find().skip(19).limit(40).sort({name:1}) 分页查询并排序,此三个方法的执行顺序是,先执行sort(),再执行skip(),最后执行limit()
5)ensureIndex()建立索引,快速查询
1)建立单索引,需要传递两个参数 ①:建立索引的字段名称,②排序参数 1升序,-1降序
上命令:db.goods.ensureIndex({name:1}) 表示给name字段建立索引,按照升序的排序
2)建立复合索引,语法一致
上命令:db.goods.ensureIndex({name:1,price:-1}) 建立一个复合索引,表示给name和price都建立索引,按照name的升序,和price的降序
6)聚合aggregate(pipeline, options)方法的使用,主要用来统计求和,求评均
pipeline:是一个数组,他的参数是$group, $group : 将集合中的文档分组,可用于统计结果,$group首先将数据根据key进行分组,_id 是要进行分组的key,如果_id为null 相当于select count(*) from table。
上命令:查询总数:count: db.items.aggregate([{$group:{_id:null,count:{$sum:1}}}])
分组查询:db.items.aggregate([{$group:{_id:'name',count:{$sum:1}}}])
查询最大值
> db.items.aggregate([{$group:{_id:"$pnumber",max:{$max:"$quantity"}}}])
查询最小值
> db.items.aggregate([{$group:{_id:"$pnumber",min:{$min:"$quantity"}}}])
查询平均值
> db.items.aggregate([{$group:{_id:"$pnumber",price:{$avg:"$price"}}}])
Mongodb和Java 整合
jar包:需要用到java对mongodb的驱动包:我这里用的3.2.2版本 下载地址:https://pan.baidu.com/s/1qXLopi0x3Yl7n7oXzT2n4A
贴代码:
1)创建一个Mongodb数据库


3)向集合中插入数据(文档:bson格式)

4)获取集合中的文档
5)更新文档操作
7)删除文档操作
8)main方法调用以上方法
9)附上链接非本地的mongodb数据库的方法(未去验证仅供参考)
10)附上项目源码
下载地址:https://pan.baidu.com/s/1T4Ufq9R4VEXccvxeUs1ezw
总结:
至此mongodb的学习到此结束,有兴趣的大家可以学习交流一下。
mongodb是一个非关系型数据库,存储量大是PB级别(1024T = 1PB),在建立所有的情况下查询速度较快,适用于现在的互联网项目开发。