本文参考
1.介绍:
1.1 介绍
1.MongoDB是一个基于分布式文件存储的数据库
2.由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
3.MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
4.它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
5.Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引
1.2 业务应用场景
-
High performance:对数据库高并发读写的需求
-
Huge Storage:对海量数据的高效率存储和访问的需求
-
High Scalability && High Availability:对数据库的高可扩展性和高可用性的需求
这些应用场景中,数据操作方面的共同特点是:
(1)数据量大
(2)写入操作频繁(读写都很频繁)
(3)价值较低的数据,对事务性要求不高
对于这样的数据,我们更适合使用 MongoDB来实现数据的存储。
1.3 体系机构
1.4 数据类型
MongoDB的最小存储单位就是文档document对象。文档document对象对应于关系型数据库的行。数据在MongoDB中以BSON(Binary-JSON)文档的格式存储在磁盘上。
BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称 Binary JSON;BSON和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和Bin Data类型。
BSON采用了类似于C语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是空间利用率不是很理想。
BSON中,除了基本JSON类型: string,integer,boolean,double,null,array和object,mongo还使用了特殊的数据类型。这些类型包括 date, object id, binary data, regular expression和code。每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详细信息
BSON数据类型参考列表:
提示:
shell默认使用64位浮点型数值。{“x”:3.14或{“x”:3}。对于整型值,可以使用NumberInt(4字节符号整数)或 NumberLong(8字节符号整数),{“x”:NumberInt(“3” ){“x”:NumberLong(“3”)}
2. Windows安装
2.1 安装
安装包及mongodb的命名格式: x.y.z
- y为奇数表示当前版本为开发版,如:1.5.2、4.1.13
- y为偶数表示当前版本为稳定版,如:1.6.3、4.0.10
- z为修正版本号,越大越好
2.2 解压
下载完成后得到压缩包,解压;其中的bin目录就存放着mongodb相关的命令
2.3 安装服务
首先要在安装目录里创建两个目录:
- 数据目录:data
- 日志目录:logs
然后以管理员模式,切换到安装目录下的bin目录,运行以下格式命令来指定mongdb的数据及日志目录
注意整个文件的路径中不能包含中文,中文,中文!踩过坑!
mongod --install --dbpath 数据目录 --logpath 日志目录\日志名称
实例
mongod --install --dbpath D:\mongodb\mongodb-win32-x86_64-windows-5.0.11\data --logpath D:\mongodb\mongodb-win32-x86_64-windows-5.0.11\logs/mongodb.logs
2.4 验证安装成功
没有任何报错和提示,则代表MongoDB服务创建成功
我们可以进行验证,win+r 输入services.msc
看到MongoDB服务即成功
2.5 删除mongo服务
如果想要删除MongoDB服务的话
SC DELETE MongoDB
3.启动
输入以下命令启动服务
net start mongodb
输入http://localhost:27017/
如果看到以下内容,代表启动成功
4.连接
navicat链接
Compass图形化连接登录(推荐)
MongoDB的GUI。直观地浏览您的数据。在几秒钟内运行查询。借助完整的CRUD功能与您的数据进行交互。查看和优化您的查询性能。在Linux,Mac或Windows上可用。Compass使您能够做出更明智的索引,文档验证等决策。
下载地址:MongoDB Compass Download | MongoDB
点击Download
下载即可,下载完成后得到压缩包
解压,可以看到MongoDBCompass.exe
双击运行,直接Next,最后Get Stated,默认选项即可
然后直接点击CONNECT就会连接本地的数据库localhost:27017
可以看到所有的数据库及相关信息
4、Linux安装&启动&连接
环境:阿里云服务器Centos7
1. 下载压缩包
下载地址:https://www.mongodb.com/try/download/community
选择对应的系统版本(这里为Centos7),以tgz的格式进行下载
2. 上传到服务器&解压
将下载得到的压缩包上传到服务器,这里使用xftp工具进行上传
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.4.gz
然后将解压后的文件移至usr/local/mongodb目录下,这是我们一般存放文件的位置
mv mongodb-linux-x86_64-rhel70-4.4.4 /usr/local/mongodb
3. 创建数据/日志存放目录
mkdir -p /usr/local/mongodb/data /usr/local/mongodb/logs
4. 启动服务
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port=27017 --fork
5. 登录退出
登录
/usr/local/mongodb/bin/mongo
退出
exit
5. 基本常用命令
1. 数据库相关
查看所有数据库
show databases
选择数据库(如果数据库不存在,不会报错;会隐式创建:当后期该数据库有数据时自动创建)
use 数据库名
删除数据库(先选中数据库)
db.dropDatabase()
2. 集合(类似于mysql中的表)相关
查看所有集合
show collections
创建集合(插入数据会隐式创建)
db.createCollection('集合名')
删除集合
db.集合名.drop()
6. CURD(文档操作)
集合存在则直接插入数据,不存在则隐式创建集合并插入数据
mongodb会自动给每条数据创建全球唯一的_id键(我们也可以自定义_id的值,只要给插入的json数据增加_id键即可覆盖,但是不推荐这样做
增:插入文档
插入一条
db.集合名.insert(json数据)
user0 = {
"_id":ObjectId(),
"name": "ymq",
"age": 18,
"hobby": ["read", "play"],
"addr": {
"country": "河南",
"city": 89
}
}
db.text.insert(user0)
插入多条
user0 = {
"_id": ObjectId(),
"name": "ymq",
"age": 18,
"hobby": ["read", "play"],
"addr": {
"country": "河南",
"city": 89
}
}
user1 = {
"name": "ymq",
"age": 18,
"hobby": ["read", "play"],
"addr": {
"country": "河南",
"city": 89
}
}
user2 = {
"name": "ymq",
"age": 18,
"hobby": ["read", "play"],
"addr": {
"country": "河南",
"city": 89
}
}
db.text.insertMany([user0, user1, user2])
save(有则修改,无则新增,根据id进行查)
db.tetx.save({"_id":3,"username":"xxx})
删:删除文档
alse删除多条,即全部删除(默认)
true删除一条
db.集合名.remove(条件 [,是否删除一条])
改:修改文档
新数据
- 默认是对原数据进行替换
- 若要进行修改,格式为 {修改器:{key:value}}
- 条件匹配不到数据时是否插入: true插入,false不插入(默认)
- 条件匹配成功的数据是否都修改: true都修改,false只修改一条(默认)
db.集合名.update(条件, 新数据 [,是否新增, 是否修改多条])
查:查询文档
db.集合名.find(条件 [,查询的列])
db.集合名.find(条件 [,查询的列]).pretty() #格式化查看
逻辑查询
成员运算
创建索引
db.集合名.createIndex(待创建索引的列:方式 [,额外选项])
创建复合索引
db.集合名.createIndex({key1:方式,key2:方式} [,额外选项])
参数说明:
待创建索引的列:方式:{key:1}/{key:-1}
1表示升序,-1表示降序; 例如{age:1}表示创建age索引并按照升序方法排列
额外选项:设置索引的名称或者唯一索引等
设置名称:{name:索引名}
唯一索引:{unique:列名}
删除全部索引
db.集合名.dropIndexes()
删除指定索引
db.集合名.dropIndex(索引名)
查看索引
db.集合名.getIndexes()
7.权限机制
介绍
介绍
安装完Mongodb后,在命令行输入mongo命令即可登录数据库,这肯定是不安全的,我们需要使用权限机制,开启验证模式
角色种类
超级用户角色:root
数据库用户角色:read、readWrite
数据库管理角色:dbAdmin、userAdmin
集群管理角色: clusterAdmin、clusterManager、clusterMonitor、hostManager
备份恢复角色: backup、restore
所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
角色说明
root:只在admin数据库中可用。超级账号,超级权限;
read:允许用户读取指定数据库;
readWrite:允许用户读写指定数据库
开启验证模式
验证模式:用户需要输入账号密码才能登录使用
安装需要身份验证的服务
1.安装服务
mongod --install --dbpath 数据目录 --logpath 日志目录\日志名称 --auth
mongod --install --dbpath D:\JAVA_Environment\MongoDB\mongodb-win32-x86_64-windows-4.4.2\data --logpath D:\JAVA_Environment\MongoDB\mongodb-win32-x86_64-windows-4.4.2\logs\mongodb-zsr.log --auth
启动mobgo
net start mongodb
登录测试
-
输入mongo命令登录,可以发现不再显示警告,且查看数据库看不到,这是因为还没有身份验证,没有通过账号登录
通过超级管理员账号登录即可看到
方法一
mongo 服务器ip地址:端口号/数据库 -u 用户名 -p 密码
mongo #先登录
use admin #选择数据库
db.auth(用户名,密码)
创建账号语法
创建账号语法
db.createUser({
“user”:“账号”,
“pwd”:“密码”,
“roles”:[{
role:“角色”,
db:“所属数据库”
}]
})
添加超级管理员账号
# 必须使用admin数据库
use admin
# 创建超级用户
db.createUser({
“user”:“zsr”,
“pwd”:“123456”,
“roles”:[{
role:“root”,
db:“admin”
}]
})
8.卸载服务
mongod --remove
9.导出数据
导出数据
-h 服务器ip地址(一般不写,默认本机)
-port 端口(一般不写,默认27017)
-u 账号
-p 密码
-d 数据库(不写则表示导出全部)
-o 备份到指定目录下
-drop 先删除数据库再导入,不写则覆盖
mongodump -h -port -u -p -d -o
备份所有数据:
在MongoDB安装目录下新建一个data_backup目录用于存放所有的备份数据
mongodump -u zsr -p 123456 -o D:\JAVA_Environment\MongoDB\mongodb-win32-x86_64-windows-4.4.2\data_backup
然后再查看data_backup目录,可以看到备份的所有的数据库
备份指定数据:
在MongoDB安装目录下新建一个data_backup2目录用于存放备份的shop数据库
用具有读权限的用户就可以
mongodump -u shop1 -p 123456 -d shop -o D:\JAVA_Environment\MongoDB\mongodb-win32-x86_64-windows-4.4.2\data_backup2
然后再查看data_backu2目录,可以看到备份的shop数据库
还原数据库mongorestore
mongostore -h -port -u -p -d --drop 备份数据目录
还原所有数据
首先删除几个数据库
然后输入如下命令从data_backup目录进行恢复
mongorestore -u zsr -p 123456 --drop D:\JAVA_Environment\MongoDB\mongodb-win32-x86_64-windows-4.4.2\data_backup
然后再次登录查看数据库,可以发现已经恢复
还原指定数据:
首先删除shop数据库
然后输入如下命令从data_backup2目录恢复shop数据库
用具有写权限的shop2用户
mongorestore -u shop2 -p 123456 -d shop --drop D:\JAVA_Environment\MongoDB\mongodb-win32-x86_64-windows-4.4.2\data_backup2\shop
然后再次登录查看shop数据库,可以发现已经恢复