MongoDB简介
1)Mongodb属于非关系性数据库 ,数据记录以文档形式(键值对)进行存储,即bson格式
2)不再有“行”(row)的概念,其运行方式主要基于两个概念:集合(collection)与文档(document)
3)支持各种编程语言:Ruby,Python,Java,C++,PHP,C#等多种语言
逻辑结构对比
关系型:数据库------》表------------》记录,字段
非关系型:数据库-----------》集合----------》键值对
何为键值对
书写格式:{键值:值}
键值对:如{“name”:”zhangsan”} 键值必须双引号,值如果是数值(int)可以不用双引号引起来,如果是字符串(string)必须用双引号引起来。
本次实验在CentOS7系统上进行实施,首先配置网络YUM源,baseurl(下载路径)指定为mongodb官网提供的yum仓库
vim /etc/yum.repos.d/mongodb.repo
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/ #指定获得下载的路径
gpgcheck=1 #表示对从这个源下载的rpm包进行校验
enabled=1 #表示启用这个源。
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
重新加载yum源,并使用yum命令下载安装mongodb
yum list
yum -y install mongodb-org
等待下载好之后,修改配置文件,指定监听IP,端口默认为27017
vim /etc/mongod.conf
..........
bindIp:0.0.0.0 #监听任意地址
port:27017 #默认监听端口
启动mongodb服务,并进入mongodb。
mongodb服务的启动,关闭有两种方式
(1)systemctl start mongod.service #启动
systemctl stop mongod.service #关闭
(2) mongod -f /etc/mongod.conf #启动
mongod -f /etc/mongod.conf --shutdown #关闭
开启服务后,查看mongodb进程
netstat -antp | grep mongod
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 16540/mongod
下面主要讲解Mongodb的基本操作及语句应用,mongodb十分人性化自带Tab键补全功能
不需要使用密码直接使用mongo命令进入服务
查看版本信息
> db.version()
3.6.7
查看数据库
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
myschool 0.000GB
school 0.000GB
进入数据库(如果创建集合则自动创建数据库,如果没有创建集合则数据库没有被创建),
> use yun
switched to db yun
创建集合;插入数据信息,并同时创建集合info
> db.createCollection("abc")
{ "ok" : 1 }
> db.info.insert({"id":1,"name":"jack1"})
WriteResult({ "nInserted" : 1 })
查看集合
> show tables
info
> show collections
info
使用循环批量添加用户
> for (var i=2;i<=100;i++)db.abc.insert({"id":i,"name":"jack"+i});
WriteResult({ "nInserted" : 1 })
查看集合中的所有数据
> db.abc.find()
查看单条数据
db.abc.findOne({"id":10})
{
"_id" : ObjectId("5b972d38fb89e57a63998a84"),
"id" : 10,
"name" : "jack10"
> a=db.abc.findOne({"id":10}) #把这条记录定义别名为a
{
"_id" : ObjectId("5b9a6f39e80a2611eecb6f7b"),
"id" : 10,
"name" : "jack10"
查看类型
> typeof(a.id)
number
> typeof(a.name)
String
修改数据:
db.info.update({"id":10},{$set:{"name":"tom10"}}) 格式:条件在前,修改在后
db.info.findOne({"id":10})
{
"_id" : ObjectId("5b972d38fb89e57a63998a84"),
"id" : 10,
"name" : "tom10"
聚合函数统计记录
db.info.count()
100
删除集合,数据
db.info.remove({"id":12}) //删除数据
Db.info.drop() //删除集合
先进入该数据库,再用下面的命令删除数据库
Use school
db.dropDatebase() //删除数据库
数据跨实例克隆集合:
db.runCommand({"clonecollection":"school.info","from":"192.168.195.137:27017"})
数据的备份与恢复,导入与导出,是在linux的shell环境进行操作
数据导出
mongoexport -d school -c info -o /opt/school.jason
条件导出 -q '{"id":{"$eq":10}}'
mongoexport -d school -c info -q '{"id":{"$eq":10}}' -o /opt/school10.jason
数据导入
mongoimport -d school -c infos --file /opt/school.jason
数据库备份与恢复,都不需要额外创建数据库和目录
数据库备份
mongodump -d yunwei(库名) -o /opt(路径)
数据库恢复
mongorestore -d yunjisuan2 --dir=/opt/yunjisuan
授权启动
在mongodb中进行授权
> use admin
switched to db admin
> db.createUser({"user":"root","pwd":"abc123","roles":["root"]})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
退出mongodb,修改配置文件 指定auth=true,否则授权不起作用
vim /etc/mongod.conf
auth=true
重启服务,再进入mongodb,只有通过授权验证才可以查看数据信息
vim mongodb.conf
> use admin
switched to db admin
> db.auth("root","abc123")
1
> show dbs
admin 0.078GB
local 0.078GB