標籤:mongodb gap 建庫 標題 bsd mon init grep ruby
MongoDB
1.1軟體介紹
? 介於關聯式資料庫和非關聯式資料庫之間的產品
– 一個基於分布式檔案儲存體的資料庫。
– 由 C++ 語言編寫。旨在為 WEB 應用提供可擴充的高效能資料儲存解決方案。
– MongoDB 將資料存放區為一個文檔,資料結構由索引值(key=>value) 對組成。
– MongoDB 文檔類似於 JSON 對象。欄位值可以包含其他文檔,數組及文檔數組。
1.2軟體特點
– 安裝簡單
– 面向文檔儲存,操作比較簡單容易
– 支援豐富的查詢表達
– 可以設定任何屬性的索引
– 支援主流程式設計語言 RUBY|PYTHON|JAVA|PHP|C++
– 支援複本集,分區
搭建 MongoDB 伺服器
2.1 裝包
[[email protected] ~]# tar -xf mongodb-linux-x86_64-rhel70-3.6.3.tgz
[[email protected] ~]# ls mongodb-linux-x86_64-rhel70-3.6.3
[[email protected] bin]# mkdir /usr/local/mongodb
[[email protected] ~]# mv mongodb-linux-x86_64-rhel70-3.6.3/bin /usr/local/mongodb/bin
[[email protected] ~]# cd /usr/local/mongodb/bin
[[email protected] mongodb]# mkdir etc log #etc設定檔 log 記錄檔
[[email protected] mongodb]# mkdir -p data/db
2.2建立設定檔
[[email protected] bin]# ./mongod --help 查看幫助
[[email protected] etc]# cd /usr/local/mongodb/etc/
[[email protected] 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啓動服務
[[email protected] mongodb]# ln -s /usr/local/mongodb/bin/* /sbin/
[[email protected] ~]# mongod -f /usr/local/mongodb/etc/mongodb.conf #開啓服務
[[email protected] mongodb]# mongod --shutdown -f /usr/local/mongodb/etc/mongodb.conf #關閉服務
2.3.1查看進程
[[email protected] log]# ps -C mongod
PID TTY TIME CMD
2432 ? 00:00:00 mongod
2.3.2 查看連接埠
[[email protected] log]# netstat -antulp | grep :27017
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2432/mongod
2.3.3查看是否有日誌檔案
[[email protected] log]# ls
Mongodb.log
2.4連接服務
[[email protected] 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地址
[[email protected] log]# killall -9 mongod
[[email protected] mongodb]# vim etc/mongodb.conf
bind_ip=192.168.4.50 更改ip
port=27050 更改連接埠
~
[[email protected] mongodb]# mongod -f /usr/local/mongodb/etc/mongodb.conf
[[email protected] mongodb]# netstat -antulp | grep :27050
tcp 0 0 192.168.4.50:27050 0.0.0.0:* LISTEN 2794/mongod
[[email protected] mongodb]# mongo -host 192.168.4.50 -port 27050
3.2 創建別名方便啓動關閉
[[email protected] ~]# 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 字串。
– 不能是Null 字元串( "") 。
– 不得含有 ‘ ‘ (空格 ) 、 . 、 $ 、 / 、 \ 和 \0 ( Null 字元 )
– 應全部小寫。
– 最多 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 })
基礎資料型別 (Elementary Data Type)
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()})
? 對象
– 對象 id 是一個 12 位元組的字串,是文檔的唯一標識
– {x: ObjectId() }
db.c1.save({name:"xiaodong",stuid:ObjectId()})
5.4內嵌 / Regex
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 Regex
– 查詢時,使用Regex作為限定條件
– {x:/ Regex /}
db.c1.save({
... name:"hanmm",match:/^a/
... })
資料匯入匯出
6.1資料匯出
文法格式 1
mongoexport [--host IP 位址 --port 連接埠 ]
d 庫名 -c 集合名 -f 欄位名 1, 欄位名 2
--type=csv > 目錄名 / 檔案名稱 .csv
[[email protected] 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
[[email protected] 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
[[email protected] 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
[[email protected] 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 忽略標題
[[email protected] 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"})
然後導出
[[email protected] 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
[[email protected] mnt]# cp /etc/passwd .
[[email protected] mnt]# ls
c1.csv c1.json c3.csv passwd
[[email protected] mnt]# sed -i ‘‘ c3.csv
[[email protected] mnt]# sed -i ‘$r passwd‘ c3.csv
[[email protected] mnt]# vim c3.csv
[[email protected] mnt]# sed -i ‘s/:/,/g‘ c3.csv
[[email protected] mnt]# vim c3.csv
把 c3.csv d導入數據庫
[[email protected] 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
[[email protected] ~]# 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 目錄下
[[email protected] 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 集合名 ] 備份目錄名
[[email protected] 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
搭建 MongoDB 伺服器,MongoDB 基本使用,資料匯入匯出