MongoDB部署以及基本使用

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                                  //守护进程方式运行

三、启动、连接服务

  1. 启动服务
[root@ip50 mongodb]# /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf
  1. 连接服务,本地连接,默认没有设置密码
[root@ip50 ~]# /usr/local/mongodb/bin/mongo
 show dbs  //显示已有的库
 use admin   //切换到admin库
 show tables  //查看当前库下有哪些表
 exit //退出

四、停止服务,设置命令别名,查看文件信息

  1. 停止服务
[root@ip50 ~]# /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf --shutdown
  1. 定义别名
[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"
  1. 永久别名定义
[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() //删除当前所在的库

数据库名称规范

  • 不能是空字符串
  • 不得含有’ '(空格)、.、$、/、\和\0(空字符)
  • 应全部小写
  • 最多64字节

集合管理

  • 查看、创建、删除集合
  • show collections 或show tables 查看集合
  • db.集合名.drop() //删除集合
  • db.集合名.save({","}) //创建集合,集合不存在时,创建并添加文档

集合命名规范

  • 不能是空字符串""
  • 不能含有\0字符(空字符),此字符表示几个的结尾
  • 不能以"system."开头,这是为系统集合保留的前缀
  • 用户创建的集合名字不能含有保留字符

文档基本管理

  • 文档:类似于MySQL表里的记录
    查看、统计、添加、删除文档
  • db.集合名.find()
  • 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/布尔bool/空null
字符串string

  • UTF-8字符串可以表示为字串类型的数据
  • {name:“张三”}或{school:“beida”}

布尔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

  1. 数值
  • shell默认使用64位浮点型数值。{x:3.14}或{x:3}
  • NumberInt(4字节整数){x:NumberInt(3)}
  • NumberLong(8字节整数){x:NumberLong(3)}
  1. 数组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) }

代码/日期/对象

  1. 代码
  • 查询和文档中可以包括任何JavaScript代码
  • {x:function(){/代码/}}
  1. 日期
  • 日期被存储为自新纪元以来经过的毫秒数,不含时区
  • {x:new Date()}
  1. 对象
  • 对象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") }

内嵌/正则表达式

  1. 内嵌
  • 文档可以嵌套其他文档,被嵌套的文档做为值来处理
> 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 }
  1. 正则表达式
  • 查询时,使用正则表达式做为限定条件
  • {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

注:

  1. 导入数据时,若库和集合不存在,则先创建库和集合后再导入数据
  2. 若库和集合已经存在,则以追加的方式导入数据到集合里
  3. 使用–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个表头

导入到userdb库下的user集合里边

[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

数据备份恢复

备份数据所有库到当前目录下的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 集合名] 备份目录名

将50上的备份文件拷贝到51上,在51上进行数据恢复

[root@ip51 ~]# /usr/local/mongodb/bin/mongorestore --host 192.168.4.51 --port 27051 -d userdb /root/mybak/userdb
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值