每天一篇,學習業內領先的NoSQL數據庫=》MongoDB
阿新 • • 發佈:2018-07-17
文件格式 並且 json def url star 文件 bson ddr MongoDB簡介:
MongoDB是一款跨平臺、面向文檔的數據庫,可以實現高性能、高可用性,並且能夠輕松擴展.
MongoDB也是一個介於非關系數據庫和關系數據庫之間的產品,是非關系型數據庫中功能最豐富,最像關系型數據庫的.
運行方式主要基於兩個概念:集合與文檔
MongoDB的特點:
1、安裝簡單,提供了面向文檔存儲功能
2、提供了復制、高可用性和自動分片功能
3、支持豐富的查詢表達式,查詢指令使用JSON形式的標記
4、支持各種編程語言:Ruby、Pathon、Java、C++、PHP、c#等
下面我在Centos7安裝MongoDB並演示相關的各種基礎操作
一、安裝MongoDB
(1)配置YUM源倉庫
[root@localhost ~]#cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#vim mongodb.repo
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
(2)安裝MongoDB
[root@localhost yum.repos.d]#yum list //測試 [root@localhost ~]#yum install -y mongodb-org [root@localhost ~]#vi /etc/mongod.conf bindIp: 0.0.0.0 #監聽地址 port: 27017 #監聽端口 [root@localhost ~]#systemctl start mongod.service [root@localhost ~]#netstat -anpt | grep 27017 tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 44010/mongod [root@localhost ~]#/usr/bin/mongo >db.version() //查看版本信息 >show dbs admin 0.0000GB local 0.0000GB > DB.getMongo() 2018-07-16T16:10:27.899+0800 E QUERY [thread1] TypeError: DB.getMongo is not a function : @(shell):1:1
二、啟動MongoDB多實例
[root@localhost ~]# cp -p /etc/mongod.conf /etc/mongod2.conf [root@localhost ~]# vim /etc/mongod2.conf path: /data/mongodb/mongod2.log //日誌位置 dbPath: /data/mongodb/mongo //存儲路徑 port: 27018 //端口號 [root@localhost ~]# mkdir -p /data/mongodb/ [root@localhost ~]# cd /data/mongodb/ [root@localhost mongodb]# mkdir mongo [root@localhost mongodb]# touch mongod2.log [root@localhost mongodb]# chmod 777 mongod2.log [root@localhost mongodb]# mongod -f /etc/mongod2.conf about to fork child process, waiting until server is ready for connections. forked process: 51823 child process started successfully, parent exiting [root@localhost mongodb]# mongo --port 27018 MongoDB shell version v3.6.6 connecting to: mongodb://127.0.0.1:27018/ MongoDB server version: 3.6.6 Server has startup warnings: 2018-07-16T16:21:43.218+0800 I CONTROL [initandlisten] > exit bye [root@localhost mongodb]# netstat -antp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 44010/mongod tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 51823/mongod tcp 0 0 127.0.0.1:49076 127.0.0.1:27018 TIME_WAIT - tcp 0 0 192.168.200.184:22 192.168.200.1:60220
三、MongoDB基本操作
> use mydb //創建並打開mydb數據庫
switched to db mydb
> a=db.info.find() //起別名
> db.createCollection(‘a‘) //向mydb數據庫添加集合a
{ "ok" : 1 }
> show collections //顯示數據庫中的所有集合
a
> typeof(a.id) //查看屬性類型
2018-07-16T17:51:21.735+0800 E QUERY [thread1] ReferenceError: a is not defined :
@(shell):1:1
> db.a.insert({"id":1,"name":"zhangsan","hobby":["game","talk","read"]})
WriteResult({ "nInserted" : 1 })
["game","talk","read"] //字符串數組 object(對象)
> db.a.find() //顯示a集合中的所有文檔
{ "_id" : ObjectId("5b4c58ddf7c9ed9a709175e9"), "id" : 1, "name" : "zhangsan", "hobby" : [ "game", "talk", "read" ] }
> db.a.insert({"id":2,"name":"lisi","hobby":["game","talk","read"]})
WriteResult({ "nInserted" : 1 })
> db.a.insert({"id":3,"name":"wangwu","hobby":["game","talk","read"]})
WriteResult({ "nInserted" : 1 })
> db.a.find()
{ "_id" : ObjectId("5b4c58ddf7c9ed9a709175e9"), "id" : 1, "name" : "zhangsan", "hobby" : [ "game", "talk", "read" ] }
{ "_id" : ObjectId("5b4c67c5bacc9efbe3a0d477"), "id" : 2, "name" : "lisi", "hobby" : [ "game", "talk", "read" ] }
{ "_id" : ObjectId("5b4c67ccbacc9efbe3a0d478"), "id" : 3, "name" : "wangwu", "hobby" : [ "game", "talk", "read" ] }
> db.a.findOne({"id":1}) //查找指定記錄
{
"_id" : ObjectId("5b4c58ddf7c9ed9a709175e9"),
"id" : 1,
"name" : "zhangsan",
"hobby" : [
"game",
"talk",
"read"
]
}
> db.a.update({"id":2},{$set:{"name":"xiaoqi"}}) //更改屬性
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.a.find()
{ "_id" : ObjectId("5b4c58ddf7c9ed9a709175e9"), "id" : 1, "name" : "zhangsan", "hobby" : [ "game", "talk", "read" ] }
{ "_id" : ObjectId("5b4c67c5bacc9efbe3a0d477"), "id" : 2, "name" : "xiaoqi", "hobby" : [ "game", "talk", "read" ] }
{ "_id" : ObjectId("5b4c67ccbacc9efbe3a0d478"), "id" : 3, "name" : "wangwu", "hobby" : [ "game", "talk", "read" ] }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
mydb 0.000GB
> use mydb
switched to db mydb
> db.a.drop() //刪除集合
true
> show collections
> db.dropDatabase() //刪除數據庫
{ "dropped" : "mydb", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
四、MongoDB日常維護
參數說明:
-d:指明數據庫的名字
-c:指明集合的名字
-f:指明要導出哪些列
-o:指明要導出的文件名
-q:指明導出數據的過濾條件
(1)導入導出
使用mongoexport和mongoimport命令來導入導出MongoDB的數據
> use school
switched to db school
> db.createCollection(‘info‘)
{ "ok" : 1 }
> for(var i=1;i<=100;i++)db.info.insert({"id":i,"name":"jack"+i})
WriteResult({ "nInserted" : 1 })
> db.info.find()
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572da"), "id" : 1, "name" : "jack1" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572db"), "id" : 2, "name" : "jack2" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572dc"), "id" : 3, "name" : "jack3" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572dd"), "id" : 4, "name" : "jack4" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572de"), "id" : 5, "name" : "jack5" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572df"), "id" : 6, "name" : "jack6"
> db.info.count() //顯示行數
100
[root@localhost ~]# mongoexport -d school -c info -o /opt/school.json //這裏註意導出的文件格式為*.json
c2018-07-16T22:13:22.668+0800 connected to: localhost
2018-07-16T22:13:22.675+0800 exported 100 records
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
rh school.json
[root@localhost opt]# vim school.json
[root@localhost opt]# mongoimport -d school -c test --file school.json
2018-07-16T22:15:22.523+0800 connected to: localhost
2018-07-16T22:15:22.700+0800 imported 100 documents
[root@localhost opt]# mongo
> use school
switched to db school
> show tables
info
test //導入文件test,是剛才導出的內容
> db.test.find()
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572da"), "id" : 1, "name" : "jack1" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572db"), "id" : 2, "name" : "jack2" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572dc"), "id" : 3, "name" : "jack3" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572dd"), "id" : 4, "name" : "jack4" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572de"), "id" : 5, "name" : "jack5" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572df"), "id" : 6, "name" : "jack6"
[root@localhost opt]# mongoexport -d school -c info -q ‘{ "id":{"$eq":10}}‘ -o /opt/top10.json //篩選需要導出的行數,-q後面有空格
2018-07-16T22:20:20.610+0800 connected to: localhost
2018-07-16T22:20:20.636+0800 exported 1 record
[root@localhost opt]# cd /opt/
[root@localhost opt]# ls
rh school.json top10.json
[root@localhost opt]# vim top10.json
{"_id":{"$oid":"5b4ca7864f78ab07f2b572e3"},"id":10.0,"name":"jack10"}
(2)備份與恢復
使用Mongodump命令來備份MongoDB數據
-h:MongoDB所在服務器地址
-d:需要備份的數據庫實例
-o:備份數據存放的位置,該目錄需提前創建
[root@localhost opt]# mkdir /backup
[root@localhost opt]# mongodump -d school -o /backup/ //備份
2018-07-16T22:43:29.828+0800 writing school.info to
2018-07-16T22:43:29.830+0800 writing school.test to
2018-07-16T22:43:29.836+0800 done dumping school.info (100 documents)
2018-07-16T22:43:29.838+0800 done dumping school.test (100 documents)
[root@localhost opt]# cd /backup/
[root@localhost backup]# ls
school
[root@localhost backup]# cd school/
[root@localhost school]# ls
info.bson info.metadata.json ==test.bson== test.metadata.json
[root@localhost school]# mongorestore -d abc --dir=/backup/school/ //恢復 備註:這裏的數據庫abc會自動創建,所以可以不存在
2018-07-16T22:46:02.801+0800 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
(3)復制數據庫
> show dbs
abc 0.000GB
admin 0.000GB
config 0.000GB
local 0.000GB
school 0.000GB
> show dbs
abc 0.000GB
admin 0.000GB
config 0.000GB
local 0.000GB
school 0.000GB
> db.copyDatabase("abc","abc1") //復制數據庫
{ "ok" : 1 }
> show dbs
abc 0.000GB
abc1 0.000GB
admin 0.000GB
config 0.000GB
local 0.000GB
school 0.000GB
(4)創建管理用戶
> use admin
> db.createUser({"user":"root","pwd":"123","roles":["root"]})
> db.auth("root","123")
(5)進程管理
> db.currentOp() //查看進程
"active" : true,
"currentOpTime" : "2018-07-16T23:28:31.188+0800",
"opid" : 19385,
"secs_running" : NumberLong(0),
> db.killOp(19385)
{ "info" : "attempting to kill op", "ok" : 1 }
每天一篇,學習業內領先的NoSQL數據庫=》MongoDB