MongoDB 概述
Day13 MongoDB 概述
l 软件介绍
• 介于关系数据库和非关系数据库之间的产品
– 一个基于分布式文件存储的数据库。
– 由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
– MongoDB 将数据存储为一个文档,数据结构由键值(key=>value) 对组成。
– MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
l 软件特点
– 安装简单
– 面向文档存储,操作比较简单容易
– 支持丰富的查询表达
– 可以设置任何属性的索引
– 支持主流编程语言 RUBY|PYTHON|JAVA|PHP|C++
– 支持副本集,分片
l 搭建 MongoDB 服务器
1.装包
• 免安装,解压后即可使用
[root@bogon ~]# mkdir /usr/local/mongodb
[root@bogon ~]# tar -zxf mongodb-linux-x86_64-rhel70-3.6.3.tgz
[root@bogon ~]# cp -r
mongodb-linux-x86_64-rhel70-3.6.3/bin /usr/local/mongodb/
[root@bogon ~]# cd /usr/local/mongodb/
[root@bogon mongodb]# mkdir etc
[root@bogon mongodb]# mkdir log
[root@bogon mongodb]# mkdir -p data/db
2.创建配置文件
• 手动创建服务主配置文件
2修改导入导出配置文件
bind_ip=192.168.4.55
port=27055
[root@bogon mongodb]#cd etc/
[root@bogon etc]# vim mongodb.conf
logpath=/usr/local/mongodb/log/mongodb.log 加入
logappend=true # 追加的方式记录日志信息
dbpath=/usr/local/mongodb/data/db # 数据库目录
fork=true # 守护进程方式运行
3.启动服务
• 启动服务 放在bin下
– mongodb ]# ./bin/mongod -f /usr/local/mongodb/etc/mongodb.conf
• 查看进程
– mongodb ]# ps -C mongod
• 查看端口
– mongodb ]# netstat -utnlp | grep :27017
4.连接服务
• 本地连接,默认没有密码
[root@bogon ~]# /usr/local/mongodb/bin/mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
......
> show dbs // 显示已有的库
admin 0.000GB
config 0.000GB
local 0.000GB
> exit # 断开连接
常用管理命令
l 数据库管理
• 库管理命令: 查看 创建 切换 删除
– show dbs 查看已有的库
² 显示当前所在的库
– db //查看当前的库
– use 库名 //切换库,若库不存在的话 ,自动延时创建库
– show collections 或 show tables //查看库下已有的集合
– db.dropDatabase() //删除当前所在的库
l 数据库管理(续 1 )
• 数据库名可以是满足以下条件的任意 UTF-8 字符串。
– 不能是空字符串( "") 。
– 不得含有 ' ' (空格 ) 、 . 、 $ 、 / 、 \ 和 \0 ( 空字符 )。
– 应全部小写。
– 最多 64 字节。
l 集合管理
• 集合管理命令:查看 创建 删除
– show collections 或 show tables # 查看集合
– db. 集合名 .drop() # 删除集合
– db. 集合名 .save({'',''}) # 创建集合,集合不存
在时,创建并添加文档
> db.user.save({'name':'bob','age':'21'})
WriteResult({ "nInserted" : 1 })
l 集合管理(续 1 )
• 合法的集合名
– 集合名不能是空字符串 "" 。
– 集合名不能含有 \0 字符(空字符 ) ,这个字符表示集合名的结尾。
– 集合名不能以 "system." 开头,这是为系统集合保留的前缀。
– 用户创建的集合名字不能含有保留字符。
l 文档基本管理
• 档 : 类似于 MySQL 表里的记录
l 文档基本管理 ( 续 1)
• 文档管理命令: 查看 统计 添加 删除
– db. 集合名 .find()
– db. 集合名 .count()
– db. 集合名 .insert({“name”:”jim”})
– db. 集合名 .find({ 条件 })
– db. 集合名 .findOne() # 返回一条文档 //O是大写
– db. 集合名 .remove({}) # 删除所有文档
– db. 集合名 .remove({ 条件 }) # 删除与条件匹配的所有文档
l 文档管理 ( 续 2)
• 插入记录
>db.user.insert(
{ title: 'MongoDB 教程 ',
description: 'MongoDB 是一个 Nosql 数据库 ',
by: 'MongoDB 中文网 ',
url: 'http://www.mongodb.org.cn',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
>> db.user.remove({ "title" : "MongoDB 教程 "}) // 删除记录
基本数据类型
l 字符 string/ 布尔 bool/ 空 null
• 字符串 string
– UTF-8 字符串都可以表示为字符串类型的数据
– {name:” 张三” } 或 { school:“tarena”}
• 布尔 bool
– 布尔类型有两个值 true 和 false , {x:true}
• 空 null
– 用于表示空值或者不存在的字段, {x:null}
l 数值 / 数组 array
• 数值
– shell 默认使用 64 为浮点型数值。 {x : 3.14} 或 {x : 3} 。
– NumberInt ( 4 字节整数) {x:NumberInt(3)}
– NumberLong ( 8 字节整数) {x:NumberLong(3)}
• 数组 array
– 数据列表或数据集可以表示为数组
– {x : [“a“ ,“ b”,”c”]}
l 代码 / 日期 / 对象
• 代码
– 查询和文档中可以包括任何 JavaScript 代码
– {x: function( ){/* 代码 */}}
• 日期
– 日期被存储为自新纪元依赖经过的毫秒数,不存储时区
– {x:new Date( )}
• 对象
– 对象 id 是一个 12 字节的字符串,是文档的唯一标识
– {x: ObjectId() }
l 内嵌 / 正则表达式
• 内嵌
– 文档可以嵌套其他文档,被嵌套的文档作为值来处理
– {tarena: {address:”Beijing”,tel:”888888”,person: “hanshaoyun”}}
• 正则表达式
– 查询时,使用正则表达式作为限定条件
– {x:/ 正则表达式 /}
l 添加变量
bin]# tail -1 /etc/profile
.... ...
export PATH=/usr/local/mongodb/bin:$PATH
mongodb]# source /etc/profile
l 停服务
bin]# pkill mongod
连接Mongodb数据库
[root@host52 bin]# ./mongo --host 192.168.4.52 --port 27052
数据导出
• 语法格式 1
– #mongoexport [--host IP 地址 --port 端口 ]
-d 库名 -c 集合名 -f 字段名 1, 字段名 2 --type=csv
> 目录名 / 文件名 .csv
• 语法格式 2
– #mongoexport --host IP 地址 --port 端口
- 库名 -c 集合名 -q ‘{ 条件 }’ -f 字段名 1 ,字段名 2
--type=csv > 目录名 / 文件名 .csv
注意:导出为 csv 格式必须使用 -f 指定字段名列表 !!!
步骤:
1)停止服务
[root@host55 mongodb]# pkill mongod
2)修改配置文件
[root@bogon etc]# vim mongodb.conf
... ... //后面加两条
bind_ip=192.168.4.55 #指定地址
port=27055 #指定端口
3)起服务
mongodb ]# ./bin/mongod -f /usr/local/mongodb/etc/mongodb.conf
4)导出
- //#导出为csv格式
[root@host55 mongodb]# mkdir -p /root/bakdir/
[root@host55 mongodb]# touch /root/bakdir/dc1.csv // 库名 //表名
mongodb]# mongoexport --host 192.168.4.55 --port 27055 -d test -c user -f name,age --type=csv > /root/bakdir/dc1.csv
- //#导出为json格式
mongodb]# mongoexport --host 192.168.4.55 --port 27055 -d test -c user --type=json > /root/dc3.json
5)查看
[root@host55 mongodb]# cat /root/dc3.json
数据导出(续 1 )
• 语法格式 3
#mongoexport [ --host IP 地址 --port 端口 ]
-d 库名 -c 集合名 [ -q ‘{ 条件 }’ –f 字段列表] --type=json > 目录名 / 文件名 .json
• 指定字段名导出
bin]# mongoexport --host 192.168.4.64 --port 27017 -d bbs -c t1 -q
'{ "name":"yaya"}' -f name,age --type=csv > /root/bakdir/dc2.csv
如图所示:
数据导入
• 语法格式 1
– #mongoimport –host IP 地址 -port 端口 -d 库名 -c 集合名 --type=json 目录名 / 文件名 .json
• 语法格式 2
– #mongoimport –host IP 地址 -port 端口 -d 库名 -c 集合名 --type=csv --headerline [--drop] 目录名 / 文件名 .csv
注意:导入数据时库和集合不存在时,会创建库和集合后导入数据反之以追加的方式导入数据到集合里,使用— drop 选项可以删除原有数据后导入新数据 --headerline 忽略标题
- 导入 //#导入为json格式
mongodb]# mongoimport --host 192.168.4.55 --port 27055 -d test -c bbd --type=json /root/dc3.json
- 导入 //#导出为csv格式
mongodb]# mongoimport --host 192.168.4.55 --port 27055 -d test -c user --type=csv --headerline /root/bakdir/dc1.csv
注意:-f 指定的标题不可删掉,否则导入不成功
数据备份恢复
• 备份数据所有库到当前目录下的 dump 目录下
# mongodump [ --host ip 地址 --port 端口 ]
• 备份时指定备份的库和备份目录
# mongodump [ --host ip 地址 --port 端口 ] -d 数据库名-c 集合名 -o 目录
目录无需事先创建 备份时指定即可!!!
• 查看 bson 文件内容
#bsondump ./dump/bbs/t1.bson
[root@host64 bin]# mongodump --host 192.168.4.64 --port 端口
//备份数据所有库到当前目录下的dump目录下
[root@host64 bin]# mongodump --host 192.168.4.64 --port 27017 -d 数据库名 -o 目标目录 //备份时指定库名的备份目录
例子:
[root@host64 bin]# mkdir /root/bakdir
[root@host64 bin]# mongodump --host 192.168.4.55 --port 27055 -d test -o /root/bakdir
[root@host55 ~]# cd /root/bakdir1/test/
[root@host64 bin]# ./bsondump bbd.bson //查看bson文件内容
数据恢复
• 语法格式 (恢复之前要确定没有要恢复的库,或者导入另一个)
– mongorestore --host IP 地址 --port 端口 -d 数据库名 [ -c 集合名 ] 备份目录名
##############################################
例子:
[root@host55 ~]# /usr/local/mongodb/bin/mongorestore --host 192.168.4.55 --port 27055 -d 数据库名 备份目录名
[root@host55 ~]# /usr/local/mongodb/bin/mongorestore --host 192.168.4.55 --port 27055 -d test /root/bakdir/test/
[root@host55 ~]# /usr/local/mongodb/bin/mongorestore --host 192.168.4.55 --port 27055 -d test -c user /root/bakdir1/test/bbd.bson
###############################################