MongoDB概述
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
简介
MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
安装
安装:sudo apt-get install mongodb
测试:
——查看进程:ps -ef | greop mongo
——客户端连接:mongo
端口:27017
MySQL与MongoDB对比
MySQL MongoDB
database db(数据库)
table collection(集合)
一条数据 document(文档)
db操作
查看所有数据库:show dbs
查看当前数据库:db 或者 db.getName()
创建或切换数据库:use python
——若使用的数据库不存在则创建然后切换,存在则切换
——新建的数据库中没有数据时,show dbs显示不出来
删除当前使用数据库:db.dropDatabase()
退出:exit 或 quit()
查看帮助:help
collection操作
查看当前数据库的所有集合:show collections
创建集合:
——单纯创建:db.createCollection(‘user’),创建一个空集合
——按需创建:db.stu.insert({name:‘lufei’,age:22}),直接使用不存在的集合,并且插入数据
删除集合:db.stu.drop()
document操作
增加文档:
1、insert
插入一条数据
db.user.insert({name:‘hao’,age:23,height:175,isDelete:0})
插入多条数据
db.user.insert([{name:‘jiang’,age:25,height:165,isDelete:0},{name:‘yang’,age:26,height:178,isDelete:0}])
2、save
不指定_id字段,功能等价于insert
db.user.save({name:‘binge’,age:24,height:174,isDelete:0})
指定_id字段,相当于更新操作
db.user.save({_id:ObjectId(“5ad9600ad43bd178471b852f”),name:‘binge’,age:30,height:174,isDelete:0})
更新文档
1、save:保存文档时,需要指定_id字段
2、update:db.集合.update(query,update,{upsert:, multi:})
db.user.update({isDelete:0}, {$set:{isDelete:1}}, {multi:true})
query:表示查询条件
update:表示更新设置,
$set:表示设置
$inc:表示增加
upsert:更新的查询结果不存在,是否作为新数据插入
multi:符合条件的数据是否全部更新,true表示全部更新,flase表示只更新一条
删除文档
1、remove:db.集合.remove(query, {justOne:})
db.user.remove({name:‘binge’}) # 默认删除所有
db.user.remove({age:26},{justOne:true}) # 只删除一条
查询文档
db.user.find()
格式:db.集合.find(query,{key1:0,key2:0})
说明:
——query表示查询条件,
——第二个参数值为1表示要显示的字段,为0表示不显示的字段
——选择字段或排除字段只能选择一种情况,要么都选择,要么都排除
pretty():格式化显示文档(以字典形式)
db.user.find().pretty()
findOne():查询一条文档
db.user.findOne({isDelete:0})
查询条件操作符
大于:KaTeX parse error: Expected '}', got 'EOF' at end of input: …:db.集合.find({:{gt:}})
——示例:db.user.find({height:{KaTeX parse error: Expected 'EOF', got '}' at position 7: gt:166}̲}) 大于等于:gte
小于:
l
t
小
于
等
于
:
lt 小于等于:
lt小于等于:lte
等于:不写符号就是等于
多个条件:db.user.find({height:{gt:160, gt:160,gt:160,lt:170}})
统计:count(),示例:db.user.find().count()
正则:db.集合.find({:/正则表达式/})
条件合并and/or
and:表示并且
——格式:db.集合.find({条件1,条件2})
——示例:db.user.find({isDelete:0, height:{KaTeX parse error: Expected 'EOF', got '}' at position 7: gt:170}̲}) or:表示或者 ——格式…or:[{条件1},{条件2}]})
——示例:db.user.find({KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: or:[{height:{gt:175}},{height:{$lt:170}}]})
限制结果集
限制:limit()
示例:db.user.find().limit(1)
跳过:skip()
示例:db.user.find().skip(1).limit(1)
结果集排序
格式:db.集合.find().sort({:1/-1})
说明:1表示升序,-1表示降序
示例:db.user.find().sort({height:-1})
python操作mongodb
安装扩展库:pip3 insatll pymongo
MongoDB特点
面向集合存储,易存储对象类型的数据;
模式自由、支持查询、支持动态查询;
支持完全索引,包含内部对象;
支持复制和故障恢复;
使用高效的二进制数据存储,包括大型对象(如视频等);
自动处理碎片,以支持云计算层次的扩展性;
支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言;
文件存储格式为BSON(一种JSON的扩展);
可通过网络访问。
在Linux安装MongoDB
#配置yum源仓库
cd /etc/yum.repos.d/
vim mongodb-org.repo
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
#安装 MongoDB
yum install mongodb-org -y
#修改配置文件
vim /etc/mongod.conf
#修改第30行的监听地址
bindIp: 0.0.0.0
#开启服务
systemctl start mongod.service
#关闭防火墙和安全功能
systemctl stop firewalld.service
setenforce 0
#查看服务端口状态
netstat -ntap | grep mongod
#复制配置文件,以开启多实例
cp -p /etc/mongod.conf /etc/mongod2.conf
#修改配置文件
vim /etc/mongod2.conf
#第10行,修改日志文件目录
path: /var/log/mongodb/mongod2.log
#第14行,修改数据存储目录
dbPath: /data/mongodb/mongo
#第29行,修改服务端口号
port: 27018
#创建实例的目录和日志文件
mkdir -p /data/mongodb
cd /data/mongodb/
mkdir mongo
touch mongod2.log
#目录授权
chmod 777 mongod2.log
#启动实例
mongod -f /etc/mongod2.conf
#指定实例的端口
mongo --port 27018
#查看服务端口状态
netstat -ntap
MongoDB 基础操作
#查看版本
db.version()
#查看数据库
show dbs;
#查看当前数据库机器的连接地址
db.getMongo()
#显示集合操作命令
db.集合名.help
#显示用户
show users
增删改查
use school;
#打开school数据库, 不存在会创建,不建立集合又会删除
db.createCollection('info')
#创建集合
db.info.insert({"id":1,"name":"zhangsan","hobby":["game","talk"]})
#添加数据
db.info.find()
#查看info集合中所有文档
show collections
#查看数据库中所有集合
db.info.update({"id":10},{$set:{"name":"tom"}})
#更改数据
db.info.remove({"id":2})
#移除info集合中的id2的数据
db.info.drop()
#删除info集合
db.dropDatabase()
#删除数据库 先use到要删的数据库里在删
db.info.count()
#统计有多少条数据
MongoDB 数据类型
String
#字符串,最常用,必须是utf-8
Boolean
#布尔值,true 或者false
Integer
#整数型
Double
#浮点型
Arrays
#数组或者列表,多个值存储到一个键
Object
#用于嵌入文档,即一个值为一个文档
Null
#存储null值
Binary Data
#二进制数据,用于存储二进制数据
Date
#存储当前日期或时间unix时间格式
查看数据类型
a=db.info.findOne({"id":1})
#查找指定记录并赋予别名a
ypeof(a.id)
#查看属性类型
备份与恢复数据
导出工具:mongoexport
导入工具:mongoimport
常见选项:
-h,--host :代表远程连接的数据库地址,默认连接本地Mongo数据库;
--port:代表远程连接的数据库的端口,默认连接的远程端口27017;
-u,--username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号;
-p,--password:代表连接数据库的账号对应的密码;
-d,--db:代表连接的数据库;
-c,--collection:代表连接数据库中的集合;
-f, --fields:代表集合中的字段,可以根据设置选择导出的字段;
--type:代表导出输出的文件类型,包括csv和json文件;
-o, --out:代表导出的文件名;
-q, --query:代表查询条件;
--skip:跳过指定数量的数据;
--limit:读取指定数量的数据记录;
--sort:对数据进行排序,可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列,如sort({KEY:1})。
for(var i=1;i<=100;i++)db.info.insert({"id":i,"name":"jack"+i})
#循环写入100条数据
mongoexport -d school -c info -o /opt/info.json
#导出指定文件
mongoimport -d school -c info1 --file /opt/info.json
#导入到info1集合
mongoexport -d school -c info1 -q '{"id":{"$eq":10}}' -o /opt/top10.json
#查询指定第10行条件导出
备份与恢复
备份工具:mongodump
恢复工具:mongorestore
常用选项:
-h 指定Mongodb所在服务器的地址也可以指定端口(例:-h 127.0.0.1:27017)
-d :需要备份的数据库;
-o :备份数据存放的目录 该目录需提前创建
mkdir /backup
#创建存放目录
mongodump -d school -o /backup/
#备份school数据库
mongorestore -d school1 --dir=/backup/school
#恢复到school1数据库
复制数据库:
db.copyDatabase("school","school2")
#复制数据库school 到school2中
克隆数据库:
把数据库school的info集合 克隆到实例2
先进入实例2的MongoDB
mongo --port 27018
db.runCommand({"cloneCollection":"school.info","from":"192.168.35.180:27017"})
安全管理
创建管理用户;
启动时必须指定 auth=true;
可以将用户分配角色;
内置数据库用户角色: read 、 readWrite;
数据库管理员角色: dbAmin 、 dbOwner 、 userAdmin;
超级用户管理员用户:root
#编辑配置文件
vim /etc/mongod.conf
auth=true
#添加指定
use admin
db.createUser({"yj":"root","pwd":"123","roles":["root"]})
#创建用户yj 密码123 分配root角色
db.auth("root","123")
#验证用户
进程管理
查看当前正在运行的进程: db.currentOp()
终止正在运行的进程: db.killOp(opid值)
db.currentOp()
#查看当前运行进程
db.killOp(4872)
#终止4872进程
MongoDB 监控
MongoDB提供一些内置工具可以监测数据库的状态信息
查看数据库实例的状态信息: db.serverStatus()
查看数据库的统计信息: db.stats()
此外也可以通过web界面查看系统监控信息需要在配置文件中加入
##编辑配置文件
vim /etc/mongod.conf
#开启http服务
httpinterface=true