一、搭建MongoDB服务器
1.装包
51]# tar -xf mongodb-linux-x86_64-rhel70-3.6.3.tgz //解包(已经源码安装好了)
51]# mkdir -p /usr/local/mongodb //创建相关的工作目录
51]# cp -r mongodb-linux-x86_64-rhel70-3.6.3/bin/ /usr/local/mongodb/
51]# vim /etc/profile //指定变量可免绝对路径
export PATH=/usr/local/mongodb/bin:$PATH
51]# source /etc/profile //即刻生效
mkdir -p etc logs data/db
bin data etc logs
2. 手动创建服务配置文件
vim /usr/local/mongodb/etc/mongodb.conf
logpath=/usr/local/mongodb/logs/mongodb.log
logappend=true
dbpath=/usr/local/mongodb/data/db
fork=true
3.启动服务
[root@host51 ]# mongod -f /usr/local/mongodb/etc/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 3453
child process started successfully, parent exiting
4. 查看相关进程
[root@host51 mongodb]# ps -C mongod
PID TTY TIME CMD
3453 ? 00:00:00 mongod
[root@host51 mongodb]# ss -anptul | grep 27017 (默认端口27017)
tcp LISTEN 0 128 127.0.0.1:27017 *:* users:((“mongod”,pid=3453,fd=11))
5. 定义启动/停止 服务的别名
51 ]# vim /etc/bashrc
alias startmgo=’mongod -f /usr/local/mongodb/etc/mongodb.conf’
alias stopmgo=’mongod -f /usr/local/mongodb/etc/mongodb.conf –shutdown’
51 ]# source /etc/bashrc
6.修改配置文件指定物理连接
1)51 ~]# vim /usr/local/mongodb/etc/mongodb.conf
bind_ip=192.168.4.51
port=27051
2)重启服务
[root@host51 ~]# stopmgo
[root@host51 ~]# startmgo
[root@host51 ~]# ss -anptul | grep mongod
tcp LISTEN 0 128 192.168.4.51:27051 *:* users:((“mongod”,pid=4100,fd=11))
二、常用管理命令
1.连接数据库
[host51 ~]# mongo //连接mongo数据库服务(本地环回连接)
[root@host51 ~]# mongo –host 192.168.4.51 –port 27051 //物理连接
2.查看、创建、删除、切换库
2.1 数据库名称规范
1) 不能是空字符串(“”)
2) 不得含有 ”(空格) . $ / \ \0(空字符)
3)应该全部小写
4)最多64个字节
show dbs //查看已有的库
use 库名 //切换库,若库不存在则延时创建库
> use bbsdb
switched to db bbsdb
> db //显示当前所在的库
bbsdb
db.dropDatabase() //删除当前所在的库
3.查看、创建、删除集合和文档
集合命名的规范?
-不能是空字符串 “”
-不能含有\0字符(空字符),此字符表示集合的结尾
-不能以”system.”开头,这是为系统集合保留前缀
-用户创建的集合不能含有保留字符
保留字符和关键字符的关系?
保留字: 系统留用(可能永远也不会用, 但是你不能用)。
关键字: 系统规定有特殊意义的词。
关键字, 一定是保留字。
保留字一般是等同于关键字的。
1)db.集合名.save({字段一:”值一”,字段二:”值二”,……..}) //创建集合时,集合不存在创建并添加文档
> db.c1.save({name:”bob”,age:21,sex:”girl”})
> db.c1.save({name:”bob”,email:”plj@tedu.cn”})
2)db.集合名.insert({字段一:”值一”,字段二:”值二”,……..}) //创建集合时,集合不存在创建并添加文档
> db.c1.insert({name:”lucy”,class:”nsd1804”,tel:”9998888”})
3)show collections 或 show tables //查看当前库下已有的集合
4)db.集合名.drop() //删除集合
> db.c1.drop()
4.查看、统计、删除文档
> use bbsdb
switched to db bbsdb
> db
bbsdb
> show tables
> db.c1.save({name:”bob”,age:21,sex:”girl”})
WriteResult({ “nInserted” : 1 })
> db.c1.save({name:”lucy”,emial:”pjl@tedu.cn”})
WriteResult({ “nInserted” : 1 })
a.查看
> db.c1.find() //不加条件默认查全部
{ “_id” : ObjectId(“5b612fc6406d3e344a8432cf”), “name” : “bob”, “age” : 21, “sex” : “girl” }
{ “_id” : ObjectId(“5b612fee406d3e344a8432d0”), “name” : “lucy”, “emial” : “pjl@tedu.cn” }
> db.c1.find({name:”lucy”}) //查看名字是lucy
> db.c1.findOne() //返回一条文档
b.统计
> db.c1.count()
c.删除
> db.c1.remove({name:”lucy”}) //删除名字是lucy的文档
> db.c1.remove({}) //不加条件默认删除所有的文档
三、基本数据类型
1.字符串(utf-8)
> db.c2.save({name:”李俊”,sex:”boy”})
2.布尔bool(只能是true,false)
> db.c2.save({name:”jack”,school:”tarena”,single:false})
> db.c2.save({name:”jack”,school:”tarena”,single:true})
3.空 null
> db.c2.save({name:”lilei”,school:”tarena”,single:false,pay:null})
4. 数值
a. 默认使用64位浮点型数值 整数和小数都可以
> db.c2.save({name:”lilei”,gz:18000.88})
> db.c2.save({name:”tom”,gz:18000})
b. NumberInt(4字节整数)
> db.c2.save({name:”harry”,xf:NumberInt(498)})
> db.c2.save({name:”tom”,xf:NumberInt(498.23)}) //可以存但是只取整数部分
c. NumberLong (8字节整数)
> db.c2.save({name:”tom”,xf:NumberLong(4918)})
5. 代码function( ){/* */}
> db.c2.save(
… {
… lname:”php”,
… code:function(){/* <?php echo “hello boy”; ?> */ },
… like:10000
… }
… )
> db.c2.find({lname:”php”})
6. 正则 /正则表达式/ 和 内嵌
a.正则
> db.c2.save({jname:”shell”,rcode:/.$/})
> db.c2.find({jname:”shell”})
b.内嵌
> db.c2.save({
tarena: {address:”Beijing”,tel:”888888”,person:”hansy” }
})
6.数组 [ 值1,值2,值N, ….]
> db.c2.save({name:”xiaoqiang”,like:[“girl”,”game”,”eat”,”sleep”]})
> db.c2.find()
7.日期 New Date( )
8.对象 ObjectId( )
> db.c2.save({name:”xiaohong”,stu_id:ObjectId(),class:”nsd1804”})
四、数据导入导出
]# mongoexport –help
]# mkdir /mbak
1.数据导出
a. csv格式(必须加-f指定字段名列表)
]# mongoexport –host 192.168.4.51 –port 27051 -d bbsdb -c c2 -f name,school –type=csv > /mbak/c2.csv
]#cat /mbak/c2.csv
b. json格式
]# mongoexport –host 192.168.4.51 –port 27051 -d bbsdb -c c2 –type=json > /mbak/c2.json
]#cat /mbak/c2.json
2.数据导入
]# mongoimport –help
a. json格式的导入
]# mongoimport –host 192.168.4.51 –port 27051 -d gamedb \
-c col –type=json /mbak/c2.json
b.csv格式的导入
]# mongoimport –host 192.168.4.51 –port 27051 -d gamedb \
-c stu –headerline –type=csv /mbak/c2.csv //导入时忽略标题
]# mongoimport –host 192.168.4.51 –port 27051 -d gamedb \
-c tea -f name , school –type=csv /mbak/c2.csv //导入时不忽略标题
]# mongoimport –host 192.168.4.51 –port 27051 -d gamedb \
-c tea -f name , school –type=csv –drop /mbak/c2.csv //删除原数据再导入
总结: 1)导入数据,若库和集合不存在,则先创建库和集合后再导入数据
2)若库和集合已经存在,则以追加的方式导入到数据集合里
3. 把系统用户信息 (/etc/passwd ) 存储到 mongodb服务器 userdb库下coluser集合里?
a.先创建结构
> use userdb
> db.coluser.save({
… name:”yaya”,
… password:”x”,
… uid:1,
… gid:1,
… comment:”my teacher”,
… homedir:”/home/yaya”,
… shell:”/bin/bash”
… })
>db.coluser.find();
b.导出数据
]# mongoexport –host 192.168.4.51 –port 27051 -d userdb -c coluser -f \ name,password,uid,gid,comment,homedir,shell –type=csv > /mbak/coluser.csv
]# cat /mbak/coluser.csv
c.拷贝 、修改生成coluser.csv
]# cp /etc/passwd /mbak/
]# sed -i ‘s/:/,/g’ passwd
]# cat passwd
]# cd /mbak
]# sed -i ‘2r passwd’ coluser.csv
d. 导入数据
]# mongoimport –host 192.168.4.51 –port 27051 -d userdb -c \
coluser –headerline –drop –type=csv /mbak/coluser.csv
> db.coluser.find()
五、数据备份的备份和恢复
1. 数据备份
a.备份时不指定路径默认当前路径以dump目录出现(不指定库默认备份全部)
]# pwd
]# mongodump –host 192.168.4.51 –port 27051
]# ls dump
]# cd /opt
]# mongodump –host 192.168.4.51 –port 27051 -d userdb
]# ls dump/userdb
b.备份时指定路径
]# mongodump –host 192.168.4.51 –port 27051 -d gamedb -c stu -o /bak1
]# ls /bak1
2.数据恢复
a.模拟数据丢失
> use gamedb
> db.stu.remove({})
b.数据恢复(也可以恢复到一个不存在的库或集合)
]# mongorestore –host 192.168.4.51 –port 27051 -d gamedb -c stu /bak1/gamedb/stu.bson
c.查看恢复的数据
> use gamedb
> db.stu.count()