溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MongoDB基本操作、備份還原及用戶管理

發(fā)布時(shí)間:2020-06-17 21:23:00 來源:網(wǎng)絡(luò) 閱讀:5263 作者:MaAiQiang 欄目:MongoDB數(shù)據(jù)庫

今日趁周末得空,將近日在學(xué)習(xí)的MongoDB數(shù)據(jù)庫常用命令作以下整理,方便工作中查看

MongoDB的邏輯結(jié)構(gòu)主要由文檔、集合和數(shù)據(jù)庫三部分組成。其中文檔是MongoDB的核心概念,它是MongoDB邏輯存儲(chǔ)的最小單元,相當(dāng)于關(guān)系型數(shù)據(jù)庫中的一行記錄,多個(gè)文檔組成集合,集合相當(dāng)于關(guān)系型數(shù)據(jù)庫中的表,多個(gè)集合組成數(shù)據(jù)庫。

SQL術(shù)語 說明 MongoDB術(shù)語 說明
database 數(shù)據(jù)庫 database 數(shù)據(jù)庫
table 數(shù)據(jù)庫表 collection 集合
row 記錄 document 行域
column 字段 field
index index 索引
table joins 表連接 不支持
primary key 主鍵 primary key 自動(dòng)將_id字段設(shè)置為主鍵

一個(gè)MongoDB中可以創(chuàng)建多個(gè)數(shù)據(jù)庫,默認(rèn)的數(shù)據(jù)庫為test。

默認(rèn)數(shù)據(jù)庫:

  • admin:從權(quán)限的角度來看,這是root數(shù)據(jù)庫。將一個(gè)用戶添加到這個(gè)數(shù)據(jù)庫中,該用戶將自動(dòng)繼承所有數(shù)據(jù)庫的權(quán)限;
  • local:這個(gè)數(shù)據(jù)永遠(yuǎn)不會(huì)被復(fù)制,可用來存儲(chǔ)限于本地單臺(tái)服務(wù)器的任意集合;
  • config:當(dāng)Mongo用于分片設(shè)置時(shí),config數(shù)據(jù)庫在內(nèi)部使用,用于保存分片的相關(guān)信息。

MongoDB 登錄、退出

#本地登錄(默認(rèn)實(shí)例端口號(hào)為:--port=27017,可以不寫)
> mongo

#登錄遠(yuǎn)程主機(jī)的實(shí)例
> mongo --host 192.168.1.2 --port =27017

#退出MongoDB
> exit

數(shù)據(jù)庫

#創(chuàng)建數(shù)據(jù)庫(如果數(shù)據(jù)庫不存在,則創(chuàng)建數(shù)據(jù)庫,否則切換到指定數(shù)據(jù)庫)
> use school

#查看所有數(shù)據(jù)庫
> show dbs

#刪除school數(shù)據(jù)庫
> use school
> db.dropDatabase()

#顯示數(shù)據(jù)庫操作命令
> db.help()

集合

集合就是MongoDB文檔組,類似于關(guān)系數(shù)據(jù)庫管理系統(tǒng)中的把表格,集合存于數(shù)據(jù)庫中,集合沒有固定的結(jié)構(gòu),這樣子集合中可以存放不同格式和類型的表格。

#創(chuàng)建info集合
> db.createcollection('info')

#查看集合
方法一:
> show tabels

方法二:
> show colletctions

#顯示info集合操作命令
> db.info.help()

文檔(增、刪、改、查)

文檔是一個(gè)鍵值對(duì)(BSON),不需要設(shè)置相同的字段,并且相同的字段不需要相同的數(shù)據(jù)類型。

1. 插入文檔

#插入一條記錄
> db.info.insert({"id":1,"score":88,"address":"金川校區(qū)","hobby":["game","talk","sport"]})

#向指定集合中插入一條文檔數(shù)據(jù)
> db.collection.insertOne()

#向指定集合中插入多條文檔數(shù)據(jù)
> db.collection.insertMany()

#通過循環(huán)批量插入數(shù)據(jù)
> for(var i=1;i<100;i++)db.info.insert({"id":i,"name":"jack"+i})

2. 刪除文檔

#刪除info集合中id=1的文檔
> db.info.remove({"id":"1"})

3. 修改文檔

#修改info集合id=1的name值為"zhangsan"文檔
db.info.update({"id":"1"},{$set:{"name":"zhangsan"}})

4. 查詢文檔

#查詢info集合所有文檔
> db.info.find()

#查詢info集合id為1的文檔
> db.info.findOne({id:1})

#統(tǒng)計(jì)記錄數(shù)
> db.info.count()

備份與恢復(fù)數(shù)據(jù)庫

  1. 通過mongoexport和mongoimport目錄來導(dǎo)出導(dǎo)入數(shù)據(jù);
  2. 導(dǎo)出數(shù)據(jù)文件的格式為:JSON格式或CSV格式;
參數(shù)說明:
  • -d:數(shù)據(jù)庫的名稱
  • -c:collection的名稱
  • -f:要導(dǎo)出哪些列
  • -o:要導(dǎo)出的文件名
  • -q:到導(dǎo)出數(shù)據(jù)的過濾條件
#備份本地school數(shù)據(jù)庫
> [root@localhost ~]# mkdir /backup
[root@localhost ~]# mongodump -d school -o /backup/
2018-07-14T03:36:44.427-0400    writing school.info to
2018-07-14T03:36:44.429-0400    done dumping school.info (99 documents)

#恢復(fù)本地school數(shù)據(jù)庫至數(shù)據(jù)庫abc中
> [root@localhost ~]# mongorestore -d abc --dir=/backup/school
2018-07-14T03:37:40.174-0400    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
2018-07-14T03:37:40.174-0400    building a list of collections to restore from /backup/school dir
2018-07-14T03:37:40.175-0400    reading metadata for abc.info from /backup/school/info.metadata.json
2018-07-14T03:37:40.187-0400    restoring abc.info from /backup/school/info.bson
2018-07-14T03:37:40.208-0400    no indexes to restore
2018-07-14T03:37:40.208-0400    finished restoring abc.info (99 documents)
2018-07-14T03:37:40.209-0400    done

#導(dǎo)出本機(jī)school數(shù)據(jù)庫info集合
> [root@localhost ~]# mongoexport -d school -c info -o /backup/info.json
2018-07-14T03:44:41.610-0400    connected to: localhost
2018-07-14T03:44:41.613-0400    exported 99 records

#導(dǎo)入備份數(shù)據(jù)至本機(jī)school數(shù)據(jù)庫user集合
> [root@localhost ~]# mongoimport -d school -c user --file /backup/info.json
2018-07-14T03:45:09.300-0400    connected to: localhost
2018-07-14T03:45:09.330-0400    imported 99 documents

#導(dǎo)出本機(jī)school數(shù)據(jù)庫user1集合id=10的數(shù)據(jù)
> [root@localhost ~]# mongoexport -d school -c user -q '{"id":{"$lt":10}}' -o /backup/top10.json
2018-07-14T03:51:23.968-0400    connected to: localhost
2018-07-14T03:51:23.969-0400    exported 9 records

復(fù)制數(shù)據(jù)庫

> show dbs
> db.copyDatabase("school","school_1")

![image](https://note.youdao.com/favicon.ico)

克隆集合

#啟用如下2個(gè)實(shí)例
> [root@localhost ~]# netstat  -tunlp | grep mongod
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      61249/mongod
tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      61212/mongod

#登錄端口號(hào)為27018的實(shí)例
> mongo --port 27018

#查詢數(shù)據(jù)庫
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

#克隆端口號(hào)為27017實(shí)例的school數(shù)據(jù)庫的info表至本實(shí)例數(shù)據(jù)庫中
> db.runCommand({"cloneCollection":"school.info","from":"192.168.100.100:27017"})

![image](https://note.youdao.com/favicon.ico)

用戶授權(quán)(認(rèn)證登錄)

#登錄mongodb
mongo

#在admin數(shù)據(jù)庫創(chuàng)建新用戶root:123123
> use admin
> db.createUser({"user":"root","pwd":"123123","roles":["root"]})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }

#退出
> exit

#關(guān)閉mongodb服務(wù)
mongod -f /data/conf/mongodb1.conf --shutdown

#帶認(rèn)證參數(shù)方式啟動(dòng)mongodb服務(wù)
mongod -f /data/conf/mongodb1.conf --auth

#登錄mongodb數(shù)據(jù)庫
mongo

#查詢數(shù)據(jù)庫
show dbs
> 不顯示內(nèi)容,這里要先授權(quán)認(rèn)證后才能執(zhí)行操作

> use admin

#使用授權(quán)root用戶驗(yàn)證
> db.auth("root":"123123")

#再次查詢,已經(jīng)可以查詢數(shù)據(jù)了
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
school  0.000GB

#退出
> exit

進(jìn)程管理

1. 查看當(dāng)前正在運(yùn)行的進(jìn)程的命令:db.currentOp() ------> 獲取opid進(jìn)程號(hào)
2. 終止正在運(yùn)行的高消耗資源的進(jìn)程命令:db.killOP(opid)

更詳細(xì)的內(nèi)容,請(qǐng)多參考 MongoDB在線幫助文檔

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI