一、概述
mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。是nosql数据库中功能最丰富,最像关系数据库的。数据库格式为BSON
1、相关概念
实例:系统上运行的mongodb的进程,类似于mysql实例;
库:每个数据库都是独立的,有自己的用户,权限,独立存储集合,类似于mysql的库;
集合:由一组文档构成,类似于mysql的表;
文档:mongodb数据库的最小数据集,是由多个键值对有序组合的数据单元,类似于mysql的数据记录;
主键
唯一标识一行数据
2、特性
1、面向集合文档存储,适合存储json形式的数据;
2、格式自由,数据格式不固定,数据结构发生变更的同时不会影响程序运行;
3、面向对象的sql查询语句,基本涵盖关系型数据库的所有查询语句;
4、有索引的支持,查询效率更快;
5、支持复制和自动故障转移;
6、可以使用分片集群提升查询性能
二、应用场景
游戏
物流
社交
物联网
视频直播
大数据
三、安装
编译安装
RPM安装
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
cd /etc/yum.repos.d/ vim mongodb.repo
yum install -y mongodb-org
启动数据库
systemctl start mongod.service
四、目录结构
rpm -ql mongodb-org-server
/etc/mongod.conf | 主配置文件 |
port: 27017 | 监听端口号 |
bindIp: 127.0.0.1 | 监听地址 |
/run/mongodb | PID文件 |
/usr/bin/mongod | 启动命令 |
/var/lib/mongo | 存储数据文件 |
/var/log/mongodb | 日志 |
rpm -ql mongodb-org-shell
/usr/bin/mongo 客户端命令
rpm -ql mongodb-org-tools
/usr/bin/mongodump | 备份数据库 |
/usr/bin/mongoexport | 备份文档 |
/usr/bin/mongoimport | 恢复文档 |
/usr/bin/mongorestore | 恢复数据库 |
五、默认数据库
1、admin:
从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。
一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
2、local:
这个数据库永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
3、config:
当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
六、数据库操作
1、库操作
登录数据库
mongo
查看数据库
show databases
show dbs
show databases show dbs
显示当前所在数据库
db
db
切换数据库
use dbName
use dbName
数据库创建
隐式创建
不用主动创建,使用use newDB,会自动创建不存在的数据库
只有在库中创建集合后才会保存,并使用show dbs查看到
创建数据库 > db.createCollection('class')
删除数据库
use dbName
db.dropdatabase()
2、文档操作
查看集合 show tables
创建集合 db.createCollection("test")
删除集合 db.需要删除的集合名称.drop()
插入数据(文档) db.集合名称.insert({key:value})
单行 db.集合名称.insertmany([{key:value},{key:value},{key:value}])
多行 mongodb默认数字的数据类型float浮点型,若要改变为整型:NumberInt(数字)
查询数据
全集合查询
db.集合名称.find({})
db.集合名称.find()
条件查询
db.info.find({查询条件1key:value,查询条件2,...},{key1:1|0,key2:1|0,...})
key:1 显示,key:0 不显示
当显示的key只有一个时,key:1 只显示该key及对应value,key:0 显示除了该key之外其他所有keyvalue
当我们只想要显示密码时就需要加0
解:
这段代码是在一个数据库名为"class1"的集合中查找所有满足条件为{'username':'ljt'}的文档。在返回结果时,只返回"password"字段的值,并且不包含"_id"字段。所以,这段代码的意思是找到所有用户名为"ljt"的文档,并返回它们的密码值。
db.class1.find({'username':'ljt'},{'password':1,'_id':0})
查询集合中有多少文档 db.集合名称.count()
db.class1.count()
删除数据
全文删除 db.集合名称.remove({})
db.class.remove({})
条件删除 db.集合名称.remove({key:value})
db.class1.remove({'san':'123'})
更新数据
db.info.update({_id:"3"}, {$set:{nickname:"jack"}})
所有满足条件的文档都进行更新
db.info.update({userid:"1003"},{$set:{nickname:"tom"}},{multi:true})
更新文档进行数值替换
db.info.update({userId:"1003"},{$inc:{userId:NumberInt(100)}})
创建用户的时候加一起
第二个
db.class.update({'userId':1},{$inc:{userId:NumberInt(30)}})
第三个
第四个
db.class.update({'userId':101},{$inc:{userId:NumberInt(-50)}})
七、MongoDB数据库备份
1、备份命令
mongodump
选项
-h=hostname:port
:指定MongoDB服务器的主机名和端口号。-u=<username>
:指定要连接到MongoDB服务器的用户名。-p=<password>
:指定要连接到MongoDB服务器的密码。--authenticationDatabase=<dbname>
:指定用于进行身份验证的数据库名称。-d=<database>
:指定要使用的数据库名称。-o=<path>
:指定输出文件的路径。
语法
mongodump -d dbName -h hostName:port -u userName -p Password -o backupDirectory
mongoexport
2、回数据库删除数据
db.class1.deleteMany({})
选项
-h=hostname:port
-u=<username>
-p=<password>
--authenticationDatabase=<dbname>
-d=<database>
-o=<path>
语法
mongoexport -d dbName -c tableName -h hostName:port -u userName -p Password -o backupDirectory/jsonFile.json
恢复命令
mongorestore
注:在恢复备份前,我们先删除 zn 数据库,不然无法体现出恢复效果
恢复数据
选项
-h=hostname:port
-u=<username>
-p=<password>
--authenticationDatabase=<dbname>
-d=<database>
--drop 当目标数据库中存在同名集合则删除再恢复
语法
mongorestore -h hostName -u username -p password -d dbName -c tableName bakcupDirector/bsonFile
mongoimport
3、恢复数据
进入库里查看数据
选项
-h=hostname:port
-u=<username>
-p=<password>
--authenticationDatabase=<dbname>
-d=<database>
--drop 当目标数据库中存在同名集合则删除再恢复
语法
mongoimport -d dbName -c tableName -h hostName:port -u userName -p Password backupDirectory/jsonFile.json