MongoDB介绍
- 介于关系数据库和非关系数据库之间的产品
- 一款基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据库存储解决方案
- 将数据存储为一个文档(类似于JSON对象),数据结构由键值(key=>value)对组成
- 支持丰富的查询表达,可以设置任何属性的索引
- 支持副本集,分片
搭建MDB服务器
一、装包
[root@ip50 ~]# tar -zxf mongodb/mongodb-linux-x86_64-rhel70-3.6.3.tgz //解压安装包
[root@ip50 ~]# mkdir /usr/local/mongodb //创建主目录
[root@ip50 ~]# cp -r mongodb-linux-x86_64-rhel70-3.6.3/bin /usr/local/mongodb/ //将主程序拷贝到主目录
[root@ip50 ~]# cd /usr/local/mongodb/
[root@ip50 mongodb]# mkdir -p etc log data/db //创建工作目录
二、修改配置文件
[root@ip50 ~]# vim /usr/local/mongodb/etc/mongodb.conf
logpath=/usr/local/mongodb/log/mongodb.log
logappend=true //追加方式记录日志信息
dbpath=/usr/local/mongodb/data/db //数据库目录
fork=true //守护进程方式运行
三、启动、连接服务
- 启动服务
[root@ip50 mongodb]# /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf
- 连接服务,本地连接,默认没有设置密码
[root@ip50 ~]# /usr/local/mongodb/bin/mongo
show dbs //显示已有的库
use admin //切换到admin库
show tables //查看当前库下有哪些表
exit //退出
四、停止服务,设置命令别名,查看文件信息
- 停止服务
[root@ip50 ~]# /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf --shutdown
- 定义别名
[root@ip50 ~]# alias mstart="/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf"
[root@ip50 ~]# alias mstop="/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf --shutdown"
- 永久别名定义
[root@ip50 ~]# vim /root/.bashrc
... ...
alias mstart="/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf"
alias mstop="/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf --shutdown"
... ...
五、修改访问服务的ip跟端口
[root@ip50 ~]# vim /usr/local/mongodb/etc/mongodb.conf
logpath=/usr/local/mongodb/log/mongodb.log
logappend=true
dbpath=/usr/local/mongodb/data/db
fork=true
bind_ip=192.168.4.50 //定义访问ip
port=27050 //定义端口
//修改之后,连接服务,需要指定ip跟端口
[root@ip50 ~]# /usr/local/mongodb/bin/mongo --host 192.168.4.50 --port 27050
数据库管理
查看、创建、切换、删除库
- show dbs //查看已有的库
- db //显示当前所在的库
- use 库名 //切换库,若库不存在则会延时创建库
- show collections 或 show tables //查看库下已有集合
- db.dropDatabase() //删除当前所在的库
数据库名称规范
- 不能是空字符串
- 不得含有’ '(空格)、.、$、/、\和
- 应全部小写 (空字符)
- 最多64字节 集合管理
- show collections 或show tables 查看集合
- db.集合名.drop() //删除集合
- db.集合名.save({","}) //创建集合,集合不存在时,创建并添加文档 集合命名规范
- 不能含有
- 不能以"system."开头,这是为系统集合保留的前缀 字符(空字符),此字符表示几个的结尾
- 用户创建的集合名字不能含有保留字符 文档基本管理查看、统计、添加、删除文档
- 文档:类似于MySQL表里的记录
- db.集合名.count()
- db.集合名.insert({“name”:“jim”})
- db.集合名.find({条件})
- db.集合名.findOne() //返回一条文档
- db.集合名.remove({}) //删除所有文档
- db.集合名.remove({条件}) //删除匹配的所有文档
[root@ip50 ~]# /usr/local/mongodb/bin/mongo --host 192.168.4.50 --port 27050
> db.t1.save({'name':'bob','age':21})
> show tables
t1
> db.t1.save({'school':'Qinghua','address':'beijing','tel':666})
> db.t1.find()
{ "_id" : ObjectId("5ce7963049efaff863716965"), "name" : "bob", "age" : 21 }
{ "_id" : ObjectId("5ce7967049efaff863716966"), "school" : "Qinghua", "address" : "beijing", "tel" : 666 }
> db.t1.drop() //删除集合
true
基本数据类型
创建集合,添加数据
字符串string
字符string/布尔bool/空null
- 布尔bool
- 布尔类型有两个值true和false,{x:true}
空null
- 用于表示空值或者不存在的字段,{x:null}
> db.t2.save({name:"lucy",ruslt:null})
> db.t2.save({"gender":true,"height":false})
> db.t2.find()
{ "_id" : ObjectId("5ce7a64d49efaff86371696c"), "name" : "lucy", "ruslt" : null }
{ "_id" : ObjectId("5ce7a68549efaff86371696d"), "gender" : true, "height" : false }
- 数值/数组array
- NumberInt(4字节整数){x:NumberInt(3)}
- NumberLong(8字节整数){x:NumberLong(3)}
- 数组array
- 数据列表或数据集可以表示为数组
- {x:[“a”,“b”,“c”]}
> db.t3.save({x:3.14,y:3.56})
> db.t3.save({z:NumberInt(55.55)})
> db.t3.save({w:NumberLong(66.66)}) //不允许存储浮点型数值
> db.t3.save({w:NumberLong(66)})
> db.t3.find()
{ "_id" : ObjectId("5ce7a8a249efaff86371696e"), "x" : 3.14, "y" : 3.56 }
{ "_id" : ObjectId("5ce7a8db49efaff86371696f"), "z" : 55 }
{ "_id" : ObjectId("5ce7a90249efaff863716970"), "w" : NumberLong(66) }
代码/日期/对象- 代码
- 日期
- {x:function(){/
- 日期被存储为自新纪元以来经过的毫秒数,不含时区 /}}
- {x:new Date()}
- 对象
- 对象id是一个12字节的字符串,是文档的唯一标识
- {x:ObjectId()}
> db.t4.save({name:"jack",birthday:new Date()})
> db.t4.save({lname:"php",phpCode:function(){/*<?php echo "hello boy!!!"; ?>*/}})
> db.t4.save({w:ObjectId()})
> db.t4.find()
{ "_id" : ObjectId("5ce7ae0949efaff863716973"), "name" : "jack", "birthday" : ISODate("2019-05-24T08:40:41.060Z") }
{ "_id" : ObjectId("5ce7ae8649efaff863716974"), "lname" : "php", "phpcode" : { "code" : "function (){/*<?php echo \"hello boy!!!\"; ?>*/}" } }
{ "_id" : ObjectId("5ce7af5449efaff863716976"), "w" : ObjectId("5ce7af5449efaff863716975") }
内嵌/正则表达式> db.t5.save({"beida":{"worker":"hsy","tel":119,address:"beijing","people":10000},money:10000})
> db.t5.find()
{ "_id" : ObjectId("5ce7b2cb49efaff863716978"), "beida" : { "worker" : "hsy", "tel" : 119, "address" : "beijing", "people" : 10000 }, "money" : 10000 }
- 正则表达式
- {x:/正则表达式/}
> db.t5.save({linenull:/^$/,linefirst:/^/})
> db.t5.find()
{ "_id" : ObjectId("5ce7b3c849efaff863716979"), "linenull" : /^$/, "linefirst" : /^/ }
数据导入导出
语法格式1
#mongoexport [--host IP地址 --port 端口] -d 库名 -c 集合名 -f 字段名1,字段名2 --type=csv > 目录名/文件名.csv
数据导出
[root@ip50 ~]# /usr/local/mongodb/bin/mongoexport --host 192.168.4.50 --port 27050 -d userdb -c t2 -f name,ruslt --type=csv > /root/1.txt
[root@ip50 ~]# cat /root/1.txt
语法格式2
#mongoexport --host IP地址 --port 端口 -d 库名 -c 集合名 -q '{条件}' -f 字段名1,字段名2 --type=csv > 目录名/文件名.csv
[root@ip50 ~]# /usr/local/mongodb/bin/mongoexport --host 192.168.4.50 --port 27050 -d userdb -c t4 -q '{name:/.*jack.*/}' -f name,age --type=csv > /root/2.txt
[root@ip50 ~]# cat /root/2.txt
注意:导出为csv格式必须使用-f指定字段名列表,如果不指定–type,默认是json格式
语法格式3
# mongoexport [--host IP地址 --port 端口] -d 库名 -c 集合名 [-q '{条件}' -f 字段列表] --type=json > 目录名/文件名.json
[root@ip50 ~]# /usr/local/mongodb/bin/mongoexport --host 192.168.4.50 --port 27050 -d userdb -c t4 --type=json > /root/3.json
[root@ip50 ~]# cat /root/3.json
语法格式1
#mongoimport --host IP地址 --port 端口 -d 库名 -c 集合名 --type=json 目录名/文件名.json
数据导入
语法格式2#mongoimport --host IP地址 --port 端口 -d 库名 -c 集合名 --type=csv [--headerline] [--drop] 目录名/文件名.csv
注:
- 使用–drop选项可以删除原数据后导入新数据,–headerline 忽略标题 导入etc写的passwd
[root@ip50 ~]# cp /etc/passwd /root/
[root@ip50 ~]# sed -i 's/:/,/g' /root/passwd
[root@ip50 ~]# sed -i '1iname,password,uid,gid,comment,homedir,shell' /root/passwd //第一行添加7个表头
[root@ip50 ~]# /usr/local/mongodb/bin/mongoimport --host 192.168.4.50 --port 27050 -d userdb -c user --type=csv --headerline --drop /root/passwd
[root@ip50 ~]# /usr/local/mongodb/bin/mongo --host 192.168.4.50 --port 27050
导入到userdb库下的user集合里边
数据备份恢复
登录查看数据
备份数据所有库到当前目录下的dump目录下
# mongodump [--host ip地址 --port 端口]
[root@ip50 ~]# /usr/local/mongodb/bin/mongodump --host 192.168.4.50 --port 27050
[root@ip50 ~]# ls dump/
备份时指定备份的库和备份目录
# mongodump [--host ip地址 --port 端口] -d 数据库名 -c 集合名 -o 目录
[root@ip50 ~]# mkdir /mybak
[root@ip50 ~]# /usr/local/mongodb/bin/mongodump --host 192.168.4.50 --port 27050 -d userdb -c user -o /mybak/
查看bson文件内容
# bsondump ./dump/bbs/t1.bson
[root@ip50 ~]# /usr/local/mongodb/bin/bsondump /mybak/userdb/user.bson
数据恢复
语法格式
#mongorestore --host ip地址 --port 端口 -d 数据库名 [-c 集合名] 备份目录名
[root@ip51 ~]# /usr/local/mongodb/bin/mongorestore --host 192.168.4.51 --port 27051 -d userdb /root/mybak/userdb
将50上的备份文件拷贝到51上,在51上进行数据恢复