设为首页 收藏本站
查看: 921|回复: 0

[经验分享] 搭建 MongoDB 服务器,MongoDB 基本使用,数据导入导出

[复制链接]

尚未签到

发表于 2018-10-24 10:49:09 | 显示全部楼层 |阅读模式
  MongoDB
  1.1软件介绍
  · 介于关系数据库和非关系数据库之间的产品
  – 一个基于分布式文件存储的数据库。
  – 由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
  – MongoDB 将数据存储为一个文档,数据结构由键值(key=>value) 对组成。
  – MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
  1.2软件特点
  – 安装简单
  – 面向文档存储,操作比较简单容易
  – 支持丰富的查询表达
  – 可以设置任何属性的索引
  – 支持主流编程语言 RUBY|PYTHON|JAVA|PHP|C++
  – 支持副本集,分片
  搭建 MongoDB 服务器
  2.1 裝包
  [root@50 ~]# tar -xf mongodb-linux-x86_64-rhel70-3.6.3.tgz
  [root@50 ~]# ls mongodb-linux-x86_64-rhel70-3.6.3
  [root@50 bin]# mkdir /usr/local/mongodb
  [root@50 ~]# mv mongodb-linux-x86_64-rhel70-3.6.3/bin /usr/local/mongodb/bin
  [root@50 ~]# cd /usr/local/mongodb/bin
  [root@50 mongodb]# mkdir etc log   #etc配置文件 log 日志文件
  [root@50 mongodb]# mkdir -p data/db
  2.2创建配置文件
  [root@50 bin]# ./mongod --help  查看幫助
  [root@50 etc]# cd /usr/local/mongodb/etc/
  [root@50 etc]# vim 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
  port=27050
  2.3啓動服務
  [root@50 mongodb]# ln -s /usr/local/mongodb/bin/* /sbin/
  [root@50 ~]# mongod -f /usr/local/mongodb/etc/mongodb.conf #開啓服務
  [root@50 mongodb]# mongod --shutdown -f /usr/local/mongodb/etc/mongodb.conf #關閉服務
  2.3.1查看进程
  [root@50 log]# ps -C mongod
  PID TTY          TIME CMD
  2432 ?        00:00:00 mongod
  2.3.2 查看端口
  [root@50 log]# netstat -antulp | grep :27017
  tcp  0  0  127.0.0.1:27017    0.0.0.0:*         LISTEN      2432/mongod
  2.3.3查看是否有日誌文件
  [root@50 log]# ls
  Mongodb.log
  2.4連接服務
  [root@50 log]# mongo
  MongoDB shell version v3.6.3
  connecting to: mongodb://127.0.0.1:27017
  MongoDB server version: 3.6.3
  ..............
  2018-07-07T10:49:21.013+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
  2018-07-07T10:49:21.013+0800 I CONTROL  [initandlisten]

  show dbs   // 显示已有的库

  admin   0.000GB
  config  0.000GB
  local   0.000GB

  db    // 顯示當前庫

  test

  exit  # 断开连接

  Bye
  MongoDB 基本使用
  3.1 指定服務IP地址
  [root@50 log]# killall -9 mongod
  [root@50 mongodb]# vim etc/mongodb.conf
  bind_ip=192.168.4.50 更改ip
  port=27050     更改端口
  ~
  [root@50 mongodb]# mongod -f /usr/local/mongodb/etc/mongodb.conf
  [root@50 mongodb]# netstat -antulp | grep :27050
  tcp    0   0 192.168.4.50:27050   0.0.0.0:*      LISTEN      2794/mongod
  [root@50 mongodb]# mongo -host 192.168.4.50 -port 27050
  3.2 創建別名方便啓動關閉
  [root@50 ~]# vim /root/.bashrc
  alias mstart='mongod -f /usr/local/mongodb/etc/mongodb.conf'
  alias mstop='mongod --shutdown -f /usr/local/mongodb/etc/mongodb.conf '
  3.3 常用管理命令
  – show dbs 查看已有的库
  – db显示当前所在的库
  – use 库名 切换库,若库不存在的话 自动延时创建库
  – show collections 或 show tables 查看库下已有的集合
  – db.dropDatabase()  删除当前所在的库
  3.4 数据库取名規則
  数据库名可以是满足以下条件的任意 UTF-8 字符串。
  – 不能是空字符串( "") 。
  – 不得含有 ' ' (空格 ) 、 . 、 $ 、 / 、 \ 和 \0 ( 空字符 )
  – 应全部小写。
  – 最多 64 字节。
  3.5 集合管理命令:查看 创建 删除
  – show collections 或 show tables # 查看集合
  – db. 集合名 .drop()   #刪除集合
  – db. 集合名 .save({'',''})    ## 创建集合,集合不存
  #在时,创建并添加文档

  db.user.save({'name':'bob','age':'21'})

  WriteResult({ "nInserted" : 1 })

  use studb

  switched to db studb

  db

  studb

  show tables
  db.c1.save({name:"bob",age:19,sex:"boy"})

  WriteResult({ "nInserted" : 1 })

  db.c1.save({name:"harry",age:20,sex:"girl"})

  WriteResult({ "nInserted" : 1 })

  db.c1.find
  show tables

  c1
  文档基本管理
  文档 : 类似于 MySQL 表里的记录
  4.1 文档基本管理
  文档管理命令: 查看 统计 添加 删除
  – db. 集合名 .find()
  

> db.c1.find()  

  – db. 集合名 .count()
  

> db.c1.count()  

  2
  

  – db. 集合名 .insert({“name”:”jim”})
  

> db.c1.insert({"name":"jim","age":11,"sex":"boy"})  

  WriteResult({ "nInserted" : 1 })
  

  – db. 集合名 .find({ 条件 })
  

> db.c1.find({"age":11})  

  { "_id" : ObjectId("5b405853f250badccca5adb8"), "name" : "jim", "age" : 11, "sex" :   "boy" }
  

  – db. 集合名 .findOne() # 返回一条文档
  

  > db.c1.findOne()  

  
{
  

  
"_id" : ObjectId("5b403a1af250badccca5adb6"),
  

  
"name" : "bob",
  

  
"age" : 19,
  

  
"sex" : "boy"
  

  }
  – db. 集合名 .remove({}) # 删除所有文档
  

> db.c1.remove({})  

  – db. 集合名 .remove({ 条件 }) # 删除与条件匹配的所有文档

  db.c1.remove({"name":"bob"})

  WriteResult({ "nRemoved" : 1 })
  基本数据类型
  5.1字符 string/ 布尔 bool/ 空 null
  字符串 string
  – UTF-8 字符串都可以表示为字符串类型的数据
  – {name:” 张三” } 或 { school:“tarena”}
  · 布尔 bool
  – 布尔类型有两个值 true 和 false , {x:true}

  db.c1.save({name:"tom",age:19,sigle:true})

  · 空 null
  – 用于表示空值或者不存在的字段, {x:null}

  db.c1.save({name:"lucy",age:18,sigle:false,pay:null})

  5.2 数值 / 数组 array
  5.2.1数值
  – shell 默认使用 64 为浮点型数值。 {x : 3.14} 或 {x : 3} 。
  

> db.c1.save({name:"yaya",x:3.99})  

  – NumberInt ( 4 字节整数) {x:NumberInt(3)}

  db.c1.save({"name":"zhangsan",x:NumberInt(3)})

  – NumberLong ( 8 字节整数) {x:NumberLong(3)}

  db.c1.save({name:"yaya",x:NumberLong(3)})
  db.c1.find()

  { "_id" : ObjectId("5b403a4bf250badccca5adb7"), "name" : "harry", "age" : 20, "sex" : "girl" }
  { "_id" : ObjectId("5b405853f250badccca5adb8"), "name" : "jim", "age" : 11, "sex" : "boy" }
  { "_id" : ObjectId("5b405e31f250badccca5adb9"), "name" : "zhangsan", "x" : 3 }
  { "_id" : ObjectId("5b405ec1f250badccca5adba"), "name" : "tom", "age" : 19, "sigle" : true }
  { "_id" : ObjectId("5b405f36f250badccca5adbb"), "name" : "lucy", "age" : 18, "sigle" : false, "pay" : null }
  { "_id" : ObjectId("5b405f9bf250badccca5adbc"), "name" : "yaya", "x" : 3.99 }
  { "_id" : ObjectId("5b405fdef250badccca5adbd"), "name" : "yaya", "x" : NumberLong(3) }
  5.2.2 数组 array
  – 数据列表或数据集可以表示为数组
  – {x : [“a“ ,“ b”,”c”]}
  5.3 代码 / 日期 / 对象
  代码
  – 查询和文档中可以包括任何 JavaScript 代码
  – {x: function( ){/ 代码 /}}
  · 日期
  – 日期被存储为自新纪元依赖经过的毫秒数,不存储时区
  – {x:new Date( )}

  db.c1.save({name:"liwei",birthday:new Date()})

  · 对象

  – 对象>  – {x: ObjectId() }

  db.c1.save({name:"xiaodong",stuid:ObjectId()})

  5.4内嵌 / 正则表达式
  5.4.1 内嵌
  – 文档可以嵌套其他文档,被嵌套的文档作为值来处理
  – {tarena: {address:“Beijing”,tel:“888888”,perso
  n:”hanshaoyun”
  – }}

  db.c1.save({

  ... ywzd:{p:"dmy",jg:69,v:2},
  ... ngsfc:{p:"birdg",jg:89,v:4}
  ... })
  5.4.2 正则表达式
  – 查询时,使用正则表达式作为限定条件
  – {x:/ 正则表达式 /}

  db.c1.save({

  ... name:"hanmm",match:/^a/
  ... })
  数据导入导出
  6.1数据导出
  语法格式 1
  mongoexport [--host IP 地址 --port 端口 ]
  d 库名 -c 集合名 -f 字段名 1, 字段名 2
  --type=csv   > 目录名 / 文件名 .csv
  [root@50 mnt]# mongoexport --host 192.168.4.50 --port 27050 -d studb -c c1 -f _id,name --type=csv  > /mnt/c1.csv
  2018-07-07T16:31:22.526+0800    connected to: 192.168.4.50:27050
  2018-07-07T16:31:22.527+0800    exported 7 records
  · 语法格式 2
  – #mongoexport --host IP 地址 --port 端口


  • 库名 -c 集合名 -q ‘{ 条件 }’ -f 字段名 1 ,字段名 2
  --type=csv > 目录名 / 文件名 .csv
  *注意:导出为 csv 格式必须使用 -f 指定字段名列表 !!!
  语法格式 3
  mongoexport [ --host IP 地址 --port 端口 ]
  -d 库名 -c 集合名 [ -q ‘{ 条件 }’ –f 字段列表
  ]
  --type=json

  目录名 / 文件名 .json

  [root@50 mnt]# mongoexport --host 192.168.4.50 --port 27050 -d studb -c c1 --type=json > /mnt/c1.json
  2018-07-07T15:50:46.202+0800    connected to: 192.168.4.50:27050
  2018-07-07T15:50:46.203+0800    exported 7 records
  6.2 数据导入
  语法格式 1
  – #mongoimport –host IP 地址 – port 端口
  -d 库名 – c 集合名
  --type=json
  目录名 / 文件名 .json
  [root@50 mnt]# mongoimport --host 192.168.4.50 --port 27050 -d bbsdb -c t1 --type=json /mnt/c1.json
  2018-07-07T16:20:39.777+0800    connected to: 192.168.4.50:27050
  2018-07-07T16:20:40.115+0800    imported 7 documents
  [root@50 mnt]# mongoimport --host 192.168.4.50 --port 27050 -d bbsdb -c t2 -f _id,name  --type=csv /mnt/c1.csv
  2018-07-07T16:43:37.797+0800    connected to: 192.168.4.50:27050
  2018-07-07T16:43:37.953+0800    imported 8 documents
  语法格式 2
  – #mongoimport –host IP 地址 – port 端口
  -d 库名 – c 集合名
  --type=csv --headerline [--drop] 目录名 / 文件名 .csv
  注意:导入数据时库和集合不存在时,会创建库和集合后导入数据,反之以追加的方式导入数据到集合里,使用— drop 选项可以删除原有数据后导入新数据 --headerline 忽略标题
  [root@50 mnt]# mongoimport --host 192.168.4.50 --port 27050 -d studb -c c1   --headerline --drop --type=csv  /mnt/c1.csv
  2018-07-07T17:00:41.677+0800    connected to: 192.168.4.50:27050
  2018-07-07T17:00:41.678+0800    dropping: studb.c1
  2018-07-07T17:00:41.967+0800    imported 7 documents
  把系統用戶信息導入mongodb
  新建一個文件

  db.c3.save({name:"yaya",pass:"x",uid:"123",gid:"123",comment:"teacher",homeaddr:"/home/bin",shell:"/bin/bash"})

  然後導出
  [root@50 mnt]# mongoexport --host 192.168.4.50  --port 27050 -d bbsdb -c c3 -f name,pass,uid,gid,comment,homeaddr,shell --type=csv >/mnt/c3.csv
  2018-07-07T17:34:29.526+0800    connected to: 192.168.4.50:27050
  2018-07-07T17:34:29.527+0800    exported 1 record
  [root@50 mnt]# cp /etc/passwd .
  [root@50 mnt]# ls
  c1.csv  c1.json  c3.csv  passwd
  [root@50 mnt]# sed -i '' c3.csv
  [root@50 mnt]# sed -i '$r passwd' c3.csv
  [root@50 mnt]# vim c3.csv
  [root@50 mnt]# sed -i 's/:/,/g' c3.csv
  [root@50 mnt]# vim c3.csv
  把 c3.csv d導入數據庫
  [root@50 mnt]# mongoimport --host 192.168.4.50 --port 27050 \

  -d studb -c c3 --headerline --drop --type=csv /mnt/c3.csv

  2018-07-07T17:45:47.963+0800    connected to: 192.168.4.50:27050
  2018-07-07T17:45:47.964+0800    dropping: studb.c3
  2018-07-07T17:45:48.121+0800    imported 43 documents
  [root@50 ~]# mongo -host 192.168.4.50 -port 27050  #登錄數據庫查看

  db.c3.find()

  { "_id" : ObjectId("5b408bcb7f8c3df38b1fca2d"), "name" : "yaya", "pass" : "x", "uid" : 123, "gid" : 123, "comment" : "teacher", "homeaddr" : "/home/bin", "shell" : "/bin/bash" }
  { "_id" : ObjectId("5b408bcb7f8c3df38b1fca2e"), "name" : "root", "pass" : "x", "uid" : 0, "gid" : 0, "comment" : "root", "homeaddr" : "/root", "shell" : "/bin/bash" }
  { "_id" : ObjectId("5b408bcb7f8c3df38b1fca2f"), "name" : "bin", "pass" : "x", "uid" : 1, "gid" : 1, "comment" : "bin", "homeaddr" : "/bin", "shell" : "/sbin/nologin" }
  { "_id" : ObjectId("5b408bcb7f8c3df38b1fca30"), "name" : "daemon", "pass" : "x", "uid" : 2, "gid" : 2, "comment" : "daemon", "homeaddr" : "/sbin", "shell" : "/sbin/nologin" }
  ............................
  数据备份恢复
  7.1数据备份
  备份数据所有库到当前目录下的 dump 目录下
  [root@50 mnt]# mongodump --host 192.168.4.50 --port 27050 -d  bbsdb
  2018-07-07T17:56:11.403+0800    writing bbsdb.t2 to
  2018-07-07T17:56:11.403+0800    writing bbsdb.t1 to
  2018-07-07T17:56:11.403+0800    writing bbsdb.c3 to
  2018-07-07T17:56:11.405+0800    done dumping bbsdb.t2 (8 documents)
  # mongodump [ --host ip 地址 --port 端口
  备份时指定备份的库和备份目录
  # mongodump [ --host ip 地址 --port 端口 ] -d 数据库名
  -c 集合名 -o 目录(目录无需事先创建 备份时指定即可!!!)
  · 查看 bson 文件内容
  #bsondump ./dump/bbs/t1.bson
  7.2数据恢复
  语法格式
  – mongorestore --host IP 地址 --port 端口 -d 数
  据库名 [ -c 集合名 ] 备份目录名
  [root@50 mnt]# mongorestore --host 192.168.4.50 --port 27050 -d db1 -c t1 /mnt/mogobak/bbsdb/t2.bson
  2018-07-07T18:04:47.914+0800    checking for collection data in /mnt/mogobak/bbsdb/t2.bson
  2018-07-07T18:04:47.914+0800    reading metadata for db1.t1 from /mnt/mogobak/bbsdb/t2.metadata.json



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625835-1-1.html 上篇帖子: MongoDB的基础概念 下篇帖子: 安装配置MongoDB数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表