这个调研笔记我参考了很多地方的文章。能找到出处的,都会在文章末尾标注,找不到的实在不好意思。
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB就不介绍了,百度百科都有。直接来整干货。
简单的说:这个数据库是以键值对(Map)的形式存放数据的。
也比较符合现在json各种传的大环境。
1. MongoDB的下载.
mongoDB官网:https://www.mongodb.com/
根据业界规则,偶数为“稳定版”,奇数为“开发版”
32bit的mongodb最大只能存放2G的数据,64bit没有限制
我下载了最新的3.4.4.msi安装稳定版。
2. 安装
安装好后在环境变量中将环境变量配置到BIN目录下
启动mongoDB 要先启动服务
mongod.exe
也可以作为window service服务安装,以后启动服务可以在
例:$mongod.exe--dbpath"D:\XXX\db" --install
几个重要参数:
--install 作为服务启动
--dbpath 生成文件路径
--logpath 日志路径
--auth 开启权限验证
开启服务,关闭服务(需要管理员权限):
net start mongodb
net end mongodb
要看下是否开启成功,可以在浏览器里面键入“http://localhost:27017/”,
MongoDB的默认端口号为:27017
官方文档地址
http://docs.mongodb.org/manual/reference/configuration-options/
关于权限: http://blog.csdn.net/chen88358323/article/details/50206651
3. 概念入门
MongoDB彻底抛弃了熟悉的“表”概念,取而代之的是“集合”。
而一条“表数据”,也变成了一个“文档”。
最基础的单元为文档,文档是由键值对构成。文档有一个唯一“_id”
文档与javascript对象相似,类似于json。数据类型:null,布尔型,字符串,数值,日期,正则表达式,数组,内嵌文档,对象ID,二进制数据,代码
大小对比:数据库>集合>文档
4. CURD操作
MongoDB内置了强大的MongoDB Shell
可以用mongo命令启动
shell就是mongodb的客户端,
同时也是一个js的编译器。默认连接test数据库。
常用命令:
db 查看当前所在数据库
show dbs 显示所有数据库
use XXX 进入XXX数据库
showcollections 显示所有集合
操作数据:
增:insert
删:remove 或者 drop
Remove 慢 drop更快
但是drop会破坏元信息
也可以不加条件
改:update
查:find findOne
Shell最强大的地方在于,可以插入javascript 例如下图:
高级语法:"$gt", "$gte", "$lt","$lte", "$ne","$gt", "$gte","$lt", "$lte", "$ne"
正则表达式:
$where: $where中的value就是熟悉热爱的js
更新:
$inc 和 $set upsert:
upsert是mongodb创造出来的“词”,这个upsert操作就是说:如果我没有查到,我就在数据库里面新增一条,其实这样也有好处,就是避免了我在数据库里面判断是update还是add操作,使用起来很简单,将update的第三个参数设为true即可。
Conut 计数 distinct 排重
5. 图形界面IDE
Orcal有PL/SQL,MySql有sqlyog
MongoDB也有很多图形IDE,常用的有MongoVUE\RockMongo\ RoboMongo
我开始调研的时候下载了MongoVUE
设置了权限,但是我发现无法连接,
然后参考了这个:
http://blog.csdn.net/sonycong/article/details/50466142
可以连接,但是只能看到集合,无法看到集合里的文档。
后来发现MongoDB的两个大的版本 2.X 和 3.X ,区别在于验证方式不同
我用的MongoVUE 版本太老 只能连接2.X版本
于是我去https://www.robomongo.org/ 官网下载了robomongo最新版
如果有权限 可以选择验证方式:
这个IDE很好用
数据库、集合、文档一目了然,而且支持mongo Shell
6. JAVA JDBC 连接 mongoDB
最重要的包:
连接数据库,选择集合(无验证):
有验证:
CRUD:
7. GridFS
官方文档:http://www.mongodb.org/display/DOCS/GridFS
概念:存储二进制文件
主要用途:存储不常改变但经常需要连续访问的大文件
最简单的方式:mongofiles工具
主要用到的方法:put(上传)\list(展示)\get(下载)
>mongofiles.exe -d gridfs put song.mp3
>db.fs.files.find()
{
_id:ObjectId('534a811bf8b4aa4d33fdf94d'),
filename:"song.mp3",
chunkSize: 261120,
uploadDate: newDate(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
length: 10401959
}
将大文件切割成多个大块,将每个块作为独立的文档进行存储
支持二进制,所以开销降到非常低,除将文件每个块单纯储存,还有一个文档用于将这些块组织在一起并存储该文件元信息
块默认使用集合:fs.chunks(默认)
Files_id—— 块所属文件的元信息
N —— 块在文件中的相对位置
Data —— 块所包含的二进制数据
元信息:fs.files(默认)
_id——文件唯一id,值就是文件的每个块
Length —— 文件所包含的字节数
Chunksize —— 组成文件的每个块的大小,单位是字节,值为256KB,可调整
Upload Date —— 文件被上传到Gfrid的基础
Md5 —— 校验码 (可用来确定是否上传成功)
也可以自己添加下载次数 MIME类型或者用户评分字段。
另外,db.fs.files.distinct(“filename”)可以查询所有文件名。
关于JAVA
测试类:
测试类:
8. 与Spring 融合
此处主要参考了这个链接:
http://blog.csdn.net/cuiran/article/details/8287204
其他参考链接:
角色权限:http://blog.csdn.net/chen88358323/article/details/50206651
无法连接:http://blog.csdn.net/sonycong/article/details/50466142
权限问题:http://blog.csdn.net/sonycong/article/details/50466142
JDBC:http://www.runoob.com/mongodb/mongodb-java.html
Spring:http://blog.csdn.net/cuiran/article/details/8287204
SpringMVC:http://www.open-open.com/lib/view/open1454374782167.html
指南:http://blog.csdn.net/lihao21/article/details/46939269
CRUD:http://blog.csdn.net/ererfei/article/details/50857103
mongoUtil:http://www.cnblogs.com/zhoulf/p/4571647.html(JDBC)
其他参考书籍:
《MongoDB权威指南》
预备借阅书籍:
《MongoDB实战、架构、开发与管理》