Mongodb的特點(diǎn):
- 模式自由:可以把不同結(jié)構(gòu)的文檔存儲(chǔ)在同一個(gè)數(shù)據(jù)庫(kù)里
- 面向集合的儲(chǔ)存:適合儲(chǔ)存JSON風(fēng)格文件的形式
- 完整的索引支持:對(duì)任何屬性可索引
- 復(fù)制和高可用性:支持服務(wù)器之間的數(shù)據(jù)復(fù)制嗎艇拍,支持主從模式和服務(wù)器間的相互復(fù)制,目的是提供冗余及自動(dòng)故障轉(zhuǎn)移
- 自動(dòng)分片:支持水平的數(shù)據(jù)庫(kù)集群,可動(dòng)態(tài)添加額外的機(jī)器
- 豐富的查詢:豐富的查詢表達(dá)式,查詢指令使用JSON形式的標(biāo)記和查詢文檔中內(nèi)嵌的對(duì)象和數(shù)組
- 快速就地更新:查詢優(yōu)化器會(huì)分析查詢表達(dá)式,并生成一個(gè)高效的查詢計(jì)劃
- 高效的傳統(tǒng)儲(chǔ)存方式:支持二進(jìn)制數(shù)據(jù)集大型對(duì)象(如:圖片或照片)
基本操作
- MongoDB將數(shù)據(jù)儲(chǔ)存為一個(gè)文檔代芜,數(shù)據(jù)結(jié)構(gòu)由鍵值對(duì)組成(key=>value)
- MongoDB文檔類似于JSON對(duì)象,字段值可以包含其他文檔、數(shù)組楣嘁、文檔數(shù)組
- 安裝管理mongodb環(huán)境、完成數(shù)據(jù)庫(kù)珍逸、集合的管理
- 數(shù)據(jù)的增加逐虚、修改、刪除谆膳、查詢
SQL屬于/概念 | MongoDB術(shù)語(yǔ)/概念 | 解釋/說(shuō)明 |
---|---|---|
database | database | 數(shù)據(jù)庫(kù) |
table | collection | 數(shù)據(jù)庫(kù)表/集合 |
row | document | 數(shù)據(jù)記錄行/文檔 |
column | field | 數(shù)據(jù)字段/域 |
index | index | 索引 |
table joins | 表連接,MongoDB不支持 | |
primary key | primary key | 主鍵,MongoDB自動(dòng)將_id字段設(shè)置為主鍵 |
三元素:數(shù)據(jù)庫(kù)叭爱、集合、文檔
- 數(shù)據(jù)庫(kù)是一個(gè)集合的物理容器
- 集合是關(guān)系型數(shù)據(jù)庫(kù)中的表
- 文檔對(duì)應(yīng)著關(guān)系型數(shù)據(jù)庫(kù)中的行
1). 文檔漱病,就是一個(gè)對(duì)象买雾,由鍵值對(duì)構(gòu)成把曼,是json的擴(kuò)展Bson形式 {'name':'guojing','gender':'男’}
2). 集合:類似于關(guān)系數(shù)據(jù)庫(kù)中的表,儲(chǔ)存多個(gè)文檔漓穿,結(jié)構(gòu)不固定嗤军,如可以存儲(chǔ)如下文檔在一個(gè)集合中 {'name':'guojing','gender':'男'} {'name':'huangrong','age':18} {'book':'shuihuzhuan','heros':'108’}
3). 一個(gè)mongodb中可以建立多個(gè)數(shù)據(jù)庫(kù)
4). 數(shù)據(jù)庫(kù):是一個(gè)集合的物理容器,一個(gè)數(shù)據(jù)庫(kù)中可以包含多個(gè)集合
1.不能是空字符串("")晃危。
2.不得含有' '(空格)叙赚、.、[圖片上傳失敗...(image-5a78e2-1549697942656)]僚饭。
6). 文檔:就是一個(gè)對(duì)象震叮,由鍵值對(duì)構(gòu)成,是json的擴(kuò)展Bson(可以理解為在JSON的基礎(chǔ)上添加了一些json中沒(méi)有的數(shù)據(jù)類型)形式鳍鸵。 需要注意的是:
1.文檔中的鍵/值對(duì)是有序的苇瓣。
2.文檔中的值不僅可以是在雙引號(hào)里面的字符串,還可以是其他幾種數(shù)據(jù)類型(甚至可以是整個(gè)嵌入的文檔)权纤。
3.MongoDB區(qū)分類型和大小寫钓简。
4.MongoDB的文檔不能有重復(fù)的鍵。
5.文檔的鍵是字符串汹想。除了少數(shù)例外情況外邓,鍵可以使用任意UTF-8字符。
文檔鍵命名規(guī)范:
1.鍵不能含有\(zhòng)0 (空字符)古掏。這個(gè)字符用來(lái)表示鍵的結(jié)尾损话。
- .和$有特別的意義,只有在特定環(huán)境下才能使用槽唾。
啟動(dòng)MongoDB
啟動(dòng)MongoDB服務(wù)
sudo service mongod start
- 停止丧枪,停止后輸入將不能啟動(dòng)shell
sudo service mongod stop
- 重置服務(wù)
sudo service mongod restop
- 啟動(dòng)mongodb客戶端
mongo
- 終端退出連接
exit 或 ctrl+c
MongoDB的基本操作
- 查看當(dāng)前數(shù)據(jù)庫(kù)名稱
db
- 列出所有在物理上存在的數(shù)據(jù)庫(kù)
show dbs
- 切換數(shù)據(jù)庫(kù) 如果數(shù)據(jù)庫(kù)不存在,則指向數(shù)據(jù)庫(kù)庞萍,但不創(chuàng)建拧烦,直到插入數(shù)據(jù)或創(chuàng)建集合時(shí)數(shù)據(jù)庫(kù)才被創(chuàng)建
use 數(shù)據(jù)庫(kù)名稱
- 查看當(dāng)前數(shù)據(jù)庫(kù)信息
db.stats()
db:當(dāng)前數(shù)據(jù)庫(kù)的名字。
collections:當(dāng)前數(shù)據(jù)庫(kù)的集合數(shù)钝计。
objects:當(dāng)前數(shù)據(jù)庫(kù)所有集合總所包含的對(duì)象
(即文檔)的數(shù)量恋博。
avgObjSize:每個(gè)文檔的平均大小(以字節(jié)
為單位)私恬。
dataSize:此數(shù)據(jù)庫(kù)中保存的未壓縮數(shù)據(jù)的
總大小债沮,不是指占有磁盤大小,單位是bytes本鸣。
storageSize:分配給此數(shù)據(jù)庫(kù)的集合用于
存儲(chǔ)文檔的空間總量疫衩,也就是當(dāng)前數(shù)據(jù)庫(kù)占
有磁盤大小,單位是bytes荣德。
numExtents:當(dāng)前數(shù)據(jù)庫(kù)所有集合包含的
擴(kuò)展數(shù)量的統(tǒng)計(jì)闷煤。
indexes:數(shù)據(jù)庫(kù)中包含的所有集合的索引
總數(shù)童芹,也就是system.indexes表數(shù)據(jù)行數(shù)。
indexSize:此數(shù)據(jù)庫(kù)上創(chuàng)建的所有索引的
總大小鲤拿,單位是bytes辐脖。
- 數(shù)據(jù)庫(kù)刪除:刪除當(dāng)前指向的數(shù)據(jù)庫(kù),如果數(shù)據(jù)庫(kù)不存在,則什么也不做
db.dropDatabase()
集合的相關(guān)操作
- 創(chuàng)建集合
db.createCollection(name, options)
- name是要?jiǎng)?chuàng)建的集合的名稱
- options是一個(gè)文檔皆愉,用于指定集合的配置 選項(xiàng)參數(shù)是可選的,所以只需要到指定的集合名稱艇抠。以下是可以使用的選項(xiàng)列表:
字段 | 類型 | 描述 |
---|---|---|
capped | 布爾 | (可選)如果為 true幕庐,則創(chuàng)建固定集合。固定集合是指有著固定大小的集合家淤,當(dāng)達(dá)到最大值時(shí)异剥,它會(huì)自動(dòng)覆蓋最早的文檔。 當(dāng)該值為 true 時(shí)絮重,必須指定 size 參數(shù)冤寿。 |
autoIndexId | 布爾 | (可選)如為 true,自動(dòng)在 _id 字段創(chuàng)建索引青伤。默認(rèn)為 false督怜。 |
size | 數(shù)值 | (可選)為固定集合指定一個(gè)最大值.當(dāng)文檔達(dá)到上限時(shí),會(huì)將之前的數(shù)據(jù)覆蓋狠角,單位為字節(jié)号杠。如果 capped 為 true,也需要指定該字段丰歌。 |
max | 數(shù)值 | (可選)指定固定集合中包含文檔的最大數(shù)量姨蟋。 |
- 例1:不限制集合大小
db.createCollection("stu")
- 例2:限制集合大小,后面學(xué)會(huì)插入語(yǔ)句后可以查看效果
參數(shù)capped:默認(rèn)值為false表示不設(shè)置上限立帖,值為
true表示設(shè)置上限
參數(shù)size:當(dāng)capped值為true時(shí)眼溶,需要指定此參數(shù)
,表示上限大小晓勇,當(dāng)文檔達(dá)到上限時(shí)堂飞,會(huì)將之前的數(shù)
據(jù)覆蓋,單位為字節(jié)
db.createCollection(
"sub",
{
capped : true,
size : 10
}
)
- 例3:創(chuàng)建固定集合 sub宵蕉,且文檔最大個(gè)數(shù)為 100 個(gè)酝静。
db.createCollection(
"sub",
{
capped : true,
size : 10 ,
max:100
}
)
- 查看數(shù)據(jù)庫(kù)集合
show collections:當(dāng)前數(shù)據(jù)庫(kù)的集合數(shù)。
- 刪除集合
db.集合名稱.drop()
如果成功刪除選定集合羡玛,則 drop() 方法返回 true别智,否則返回 false
文檔
文檔是一組鍵值對(duì)(即BSON)。MongoDB 的文檔不需要設(shè)置相同的字段稼稿,并且相同的字段不需要相同的數(shù)據(jù)類型薄榛,這與關(guān)系型數(shù)據(jù)庫(kù)有很大的區(qū)別讳窟,也是 MongoDB 非常突出的特點(diǎn)。
再次對(duì)比關(guān)系型數(shù)據(jù)庫(kù)與非關(guān)系型數(shù)據(jù)庫(kù)的相關(guān)術(shù)語(yǔ): 下表列出了 RDBMS 與 MongoDB 對(duì)應(yīng)的術(shù)語(yǔ):
RDBMS | MongoDB |
---|---|
數(shù)據(jù)庫(kù) | 數(shù)據(jù)庫(kù) |
表格 | 集合 |
行 | 文檔 |
列 | 字段 |
表聯(lián)合 | 嵌入文檔 |
主鍵 | 主鍵 (MongoDB 提供了 key 為 _id ) |
MongoDB 數(shù)據(jù)類型
下表為MongoDB中常用的幾種數(shù)據(jù)類型敞恋。
數(shù)據(jù)類型 | 描述 |
---|---|
String | 字符串丽啡。存儲(chǔ)數(shù)據(jù)常用的數(shù)據(jù)類型。在 MongoDB 中硬猫,UTF-8 編碼的字符串才是合法的补箍。 |
Integer | 整型數(shù)值。用于存儲(chǔ)數(shù)值啸蜜。根據(jù)你所采用的服務(wù)器坑雅,可分為 32 位或 64 位。 |
Boolean | 布爾值衬横。用于存儲(chǔ)布爾值(真/假)裹粤。 |
Double | 雙精度浮點(diǎn)值。用于存儲(chǔ)浮點(diǎn)值蜂林。 |
Array | 用于將數(shù)組或列表或多個(gè)值存儲(chǔ)為一個(gè)鍵遥诉。 |
Timestamp | 時(shí)間戳。記錄文檔修改或添加的具體時(shí)間噪叙。 |
Object | 用于嵌入式的文檔矮锈,即一個(gè)值為一個(gè)文檔 |
Null | 用于創(chuàng)建空值。 |
Date | 日期時(shí)間睁蕾。用 UNIX 時(shí)間格式來(lái)存儲(chǔ)當(dāng)前日期或時(shí)間愕难。你可以指定自己的日期時(shí)間:創(chuàng)建 Date 對(duì)象,傳入年月日信息惫霸。 |
Object ID | 對(duì)象 ID猫缭。用于創(chuàng)建文檔的 ID。 |
Binary Data | 二進(jìn)制數(shù)據(jù)壹店。用于存儲(chǔ)二進(jìn)制數(shù)據(jù)猜丹。 |
ObjectId
ObjectId 類似唯一主鍵,可以很快的去生成和排序
- 每個(gè)文檔都有一個(gè)屬性硅卢,為_id射窒,保證每個(gè)文檔的唯一性
- 可以自己去設(shè)置_id插入文檔
- 如果沒(méi)有提供,那么MongoDB為每個(gè)文檔提供了一個(gè)獨(dú)特的_id将塑,類型為objectID
- objectID是一個(gè)12字節(jié)的十六進(jìn)制數(shù) 前4個(gè)字節(jié)為當(dāng)前時(shí)間戳 接下來(lái)3個(gè)字節(jié)的機(jī)器ID 接下來(lái)的2個(gè)字節(jié)中MongoDB的服務(wù)進(jìn)程id 最后3個(gè)字節(jié)是簡(jiǎn)單的增量值
插入文檔
- 單條插入
db.集合名稱.insert(document)
注意:插入文檔時(shí)脉顿,如果不指定_id參數(shù),MongoDB會(huì)為文檔分配一個(gè)唯一的ObjectId*
- 例:
db.stu.insert(
{name:'xxx',gender:1}
)db.stu.insert(
{
_id:'20201226',
name:'xxxx',gender:1
}
)
- 多條插入:
db.stu.insert(
[
{name:'王明',gender:1},
{name:'王玲玲',gender:0}
]
)
在3.2版本之后還提供了插入多條數(shù)據(jù)和插入單條數(shù)據(jù)的方法
db.集合名稱.insertOne(document)
db.集合名稱.insertMany(document)
查詢?nèi)课臋n
db.集合名稱.find()
更新文檔
MongoDB 使用 update() 和 save() 方法來(lái)更新集合中的文檔点寥。兩個(gè)函數(shù)是有區(qū)別的艾疟。
- update() 方法 update() 方法用于更新已存在的文檔
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
}
)
參數(shù)說(shuō)明
query : update的查詢條件,類似sql update查詢內(nèi)where后面的。
-
update : update的對(duì)象和一些更新的操作符(如[圖片上傳失敗...(image-208522-1549697942656)]
inc...)等蔽莱,也可以 理解為sql update查詢內(nèi)set后面的
upsert : 可選弟疆,這個(gè)參數(shù)的意思是,如果不存在update 的記錄盗冷,是否插入objNew,true為插入怠苔,默認(rèn)是false,不插 入仪糖。
multi : 可選柑司,mongodb 默認(rèn)是false,只更新找到的第 一條記錄,如果這個(gè)參數(shù)為true,就把按條件查出來(lái)多條記錄 全部更新锅劝。
例1:全文檔更新
db.stu.update(
{name:'xxxxx'},
{name:'張xxx'}
)
例2:指定屬性更新帜羊,通過(guò)操作符$set
db.stu.insert(
{name:'李自成',gender:1}
)
db.stu.update(
{name:'李自成'},
{
$set:{name:'闖王李自成'}
}
)
例4:修改多條匹配到的數(shù)據(jù)(跟新所有name為‘李自成’的文檔的dender字段)
db.stu.update(
{name:'李自成'},
{
$set:{gender:0}
},
{multi:true}
)
- save() 方法 save() 方法通過(guò)傳入的文檔來(lái)替換已有文檔,如果文檔的_id已經(jīng)存在則修改,如果文檔的_id不存在則添加
db.集合名稱.save(document)
db.stu.save(
{
_id:'20180820101010',
'name':'跟新'
}
)
pretty()
該函數(shù)鸠天,將數(shù)據(jù)以格式化的方式展示
db.集合名稱.find().pretty()
- 刪除文檔
remove() 方法的基本語(yǔ)法格式如下所示:
db.collection.remove(
<query>,
{justOne: <boolean>,}
)
參數(shù)說(shuō)明
- query :(可選)刪除的文檔的條件。
- justOne : (可選)如果設(shè)為 true 或 1帐姻,則只刪除一個(gè)文檔稠集。
db.集合名稱.remove(document)
- 例1:只刪除1條,1表示是否只刪除一條為true的意思
db.集合名稱.remove(
document,1
)
db.集合名稱.remove(
document,
{justOne:true}
)
- 例2:表示刪除全部
db.集合名稱.remove({})基本的數(shù)據(jù)查詢
db.集合名稱.find({條件文檔})
- findOne():查詢饥瓷,只返回第一個(gè)
db.集合名稱.findOne({條件文檔})
- 例:查詢出姓名等于李某某的學(xué)生
db.stu.find({name:'李某某'})
db.stu.findOne({name:'李某某'})比較運(yùn)算符
- 等于剥纷,默認(rèn)是等于判斷,沒(méi)有運(yùn)算符
- 小于$lt
- 小于或等于$lte
- 大于$gt
- 大于或等于$gte
- 不等于$ne
例:查詢年齡大于或等于18的學(xué)生
db.stu.find({age:{$gte:18}})
邏輯運(yùn)算符
查詢時(shí)可以有多個(gè)條件呢铆,多個(gè)條件之間需要通過(guò)邏輯運(yùn)算符連接
邏輯與:默認(rèn)是邏輯與的關(guān)系
例:查詢年齡大于或等于18晦鞋,并且性別為1的學(xué)生
db.stu.find(
{
age:{$gte:18},
gender:1
}
)
邏輯或:使用$or
例4:查詢年齡大于18,或性別為0的學(xué)生
db.stu.find(
{
[圖片上傳失敗...(image-16b3f6-1549697942655)]gt:18}},
{gender:1}
]
}
)
and和or一起使用
例5:查詢年齡大于18或性別為0的學(xué)生棺克,并且學(xué)生的姓名為gj
db.stu.find(
{
[圖片上傳失敗...(image-22b084-1549697942655)]gte:18}},
{gender:1}
],
name:'gj'
}
)
范圍運(yùn)算符
使用"[圖片上傳失敗...(image-274450-1549697942659)]
nin" 判斷是否在某個(gè)范圍內(nèi) 例:查詢年齡為18悠垛、28的學(xué)生
db.stu.find(
{
age:{$in:[18,28]}
}
)
支持正則表達(dá)式
使用//或$regex編寫正則表達(dá)式 例:查詢姓李的學(xué)生
db.stu.find(
{name:/^李/}
)
db.stu.find(
{
name:{$regex:'^李'}
}
)
$type
想要獲取某一中類型的數(shù)據(jù) 例如:如果想獲取 "col" 集合中 title 為 String 的數(shù)據(jù),你可以使用以下命令:
db.col.find(
{
"title" : {$type : 'string'}
}
)
Limit與Skip方法
- limit() 方法 讀取指定數(shù)量的數(shù)據(jù)記錄
db.集合名稱.find().limit(num)
- Skip() 方法 使用skip()方法來(lái)跳過(guò)指定數(shù)量的數(shù)據(jù)娜谊,skip方法同樣接受一個(gè)數(shù)字參數(shù)作為跳過(guò)的記錄條數(shù)确买。
db.集合名稱.find().skip(num)
limit() 方法、Skip() 方法 同時(shí)使用纱皆,不分先后順序 表示跳過(guò)多少條湾趾,返回多少條
查詢第5至8條數(shù)據(jù)
db.stu.find().limit(4).skip(5)
db.stu.find().skip(5).limit(4)
sort() 方法排序
**sort() **方法對(duì)數(shù)據(jù)進(jìn)行排序,sort() 方法可以通過(guò)參數(shù)指定排序的字段派草,并使用 1 和 -1 來(lái)指定排序的方式搀缠,其中 1 為升序排列,而 -1 是用于降序排列近迁。
- 升序
db.集合名稱.find().sort({排序字段:1})
- 降序
db.集合名稱.find().sort({排序字段:-1})
根據(jù)多個(gè)字段排序: 例:先根據(jù)年齡做降序艺普,再根據(jù)性別做升序
db.集合名稱.find().sort({age:-1,gender:1})
注意: skip(), limilt(), sort()三個(gè)放在一起執(zhí)行的時(shí)候,執(zhí)行的順序是先 sort(), 然后是 skip(),最后是顯示的 limit()衷敌。
distinct() 去重
db.集合名稱.distinct('去重字段',{條件})
例:查找年齡大于20的姓名(去重)
db.集合名稱.distinct('name',{age:{$gt:20}})
project投影(可以指定想要返回的字段)
在查詢到的返回結(jié)果中勿侯,只選擇必要的字段,而不是選擇一個(gè)文檔的整個(gè)字段
參數(shù)為字段與值缴罗,值為1表示顯示助琐,值為0不顯示
db.集合名稱.find({},{字段名稱:0,...})
count() 統(tǒng)計(jì)個(gè)數(shù)
db.集合名稱.count({條件})
- 表示返回集合中的文檔數(shù)量
db.集合名稱.find().count()
db.集合名稱.find({條件}).count()
- 在count()函數(shù)中添加條件
例:統(tǒng)計(jì)年齡大于20的男生人數(shù)
db.集合名稱.count(
{
age:{$gt:20},
gender:1})
MongoDB的聚合
aggregate() 方法
MongoDB中聚合的方法使用aggregate() 語(yǔ)法
aggregate() 方法的基本語(yǔ)法格式如下所示:
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
管道的概念
- 管道在Unix和Linux中一般用于將當(dāng)前命令的輸出結(jié)果作為下一個(gè)命令的參數(shù)。
- MongoDB的聚合管道將MongoDB文檔在一個(gè)管道處理完畢后將結(jié)果傳遞給下一個(gè)管道處理面氓。管道操作是可以重復(fù)的兵钮。
- 表達(dá)式:處理輸入文檔并輸出。表達(dá)式是無(wú)狀態(tài)的舌界,只能用于計(jì)算當(dāng)前聚合管道的文檔掘譬,不能處理其它的文檔。
聚合框架中常用的幾個(gè)操作:
$group
:將集合中的文檔分組呻拌,可用于統(tǒng)計(jì)結(jié)果葱轩。
$project
:修改輸入文檔的結(jié)構(gòu)∶晡眨可以用來(lái)重命名靴拱、增加或
刪除域,也可以用于創(chuàng)建計(jì)算結(jié)果以及嵌套文檔猾普。
$match
:用于過(guò)濾數(shù)據(jù)袜炕,只輸出符合條件的文檔,$match使用MongoDB的標(biāo)準(zhǔn)查詢操作。
$limit
:用來(lái)限制MongoDB聚合管道返回的文檔數(shù)初家。
$skip
:在聚合管道中跳過(guò)指定數(shù)量的文檔偎窘,并返回余下的文
檔。
$unwind
:將文檔中的某一個(gè)數(shù)組類型字段拆分成多條溜在,每條
包含數(shù)組中的一個(gè)值陌知。
$sort
:將輸入文檔排序后輸出。
$sum
: 計(jì)算總和
$avg
:計(jì)算平均值
$min
:獲取最小值
$max
:獲取最大值
$count
:計(jì)算總數(shù)
$push
:插入一個(gè)值到元組
$first
:排序獲取第一個(gè)文檔數(shù)據(jù)
$last
:排序獲取最后一個(gè)文檔數(shù)據(jù)
管理員權(quán)限
- root:只在admin數(shù)據(jù)庫(kù)中可用掖肋,超級(jí)賬號(hào)纵诞,超級(jí)權(quán)限
- Read:允許用戶讀取指定的數(shù)據(jù)庫(kù)
- readWrite:允許用戶讀寫指定數(shù)據(jù)庫(kù)
創(chuàng)建超級(jí)管理用戶
use admindb.createUser({ user:'admin',pwd:'123',roles:[{role:'root',db:'admin'}]})
啟用安全認(rèn)證
新版本 注意:keys and values之間一定要加空格, 否則解析會(huì)報(bào)錯(cuò)
security:
authorization: enabled
低版本
或者修改配置文件將auth=true前面的注釋拿掉然后保存并退出
修改普通用戶權(quán)限或密碼
- 修改用戶:可以修改pwd、roles屬性
- 注意這里只有超級(jí)管理員才有權(quán)限修改普通用戶的密碼和管理權(quán)限
- 修改用戶密碼(切換到有權(quán)限操作的數(shù)據(jù)庫(kù)下)
db.updateUser(‘ljh',{pwd:'456'})
- 添加用戶權(quán)限(切換到有權(quán)限操作的數(shù)據(jù)庫(kù)下)
db.grantRolesToUser('username',[{role:'',db:''}])
- 移除用戶權(quán)限(切換到有權(quán)限操作的數(shù)據(jù)庫(kù)下)
db.revokeRolesFromUser('username',[{role:'',db:''}])
- 刪除用戶(方式一)(切換到有權(quán)限操作的數(shù)據(jù)庫(kù)下)
db.dropUser('username')
- 刪除用戶 (方式二)
use admin db.system.users.remove({user:'username'})
MongoDB 備份(mongodump)
- 在Mongodb中我們使用mongodump命令來(lái)備份MongoDB數(shù)據(jù)培遵。該命令可以導(dǎo)出所有數(shù)據(jù)到指定目錄中浙芙。
mongodump -h dbhost -d dbname -o dbdirectory
- -h: MongDB所在服務(wù)器地址,例如:127.0.0.1籽腕,當(dāng)然也可以指定端口號(hào):127.0.0.1:27017
- -d: 需要備份的數(shù)據(jù)庫(kù)實(shí)例嗡呼,例如:test
- -o: 備份的數(shù)據(jù)存放位置,例如:c:\data\dump皇耗,當(dāng)然該目錄需要提前建立南窗,在備份完成后,系統(tǒng)自動(dòng)在dump目錄下建立一個(gè)test目錄,這個(gè)目錄里面存放該數(shù)據(jù)庫(kù)實(shí)例的備份數(shù)據(jù)万伤。
如果沒(méi)有開啟權(quán)限
mongodump -h 127.0.0.1:27017 -d 數(shù)據(jù)庫(kù)名稱 -o ~/Desktop/數(shù)據(jù)庫(kù)備份的路徑
mongodump -h 127.0.0.1:27017 -o ~/Desktop/數(shù)據(jù)庫(kù)備份的路徑
如果開啟了權(quán)限設(shè)置(使用超級(jí)管理員權(quán)限)
我們也可以使用賬號(hào)密碼的方式備份指定用戶的數(shù)據(jù)庫(kù)
設(shè)置了超級(jí)管理員也可以使用如下方法備份
mongodump -u username -p password --authenticationDatabase 'admin' -d dbname -o dbpath
恢復(fù)備份
mongodb使用 mongorestore 命令來(lái)恢復(fù)備份的數(shù)據(jù)窒悔。
mongorestore -h hostname:port -d dbname --dir path
- -h (host): MongoDB所在服務(wù)器地址,默認(rèn)為: localhost:27017
- -d (db): 需要恢復(fù)的數(shù)據(jù)庫(kù)實(shí)例敌买,例如:test简珠,當(dāng)然這個(gè)名稱也可以和備份時(shí)候的不一樣,比如test2
- --dir: 指定備份的目錄
如果沒(méi)有開啟權(quán)限
mongorestore -h 127.0.0.1:27017 -d 數(shù)據(jù)庫(kù)名稱 --dir 數(shù)據(jù)庫(kù)備份文件路徑
mongorestore -h 127.0.0.1 -dir 數(shù)據(jù)庫(kù)備份文件路徑
下面是我添加了管理員權(quán)限之后的備份命令如果開啟了權(quán)限設(shè)置(使用超級(jí)管理員權(quán)限)
mongorestore -u username -p password --authenticationDatabase 'admin' -d 數(shù)據(jù)庫(kù)名稱 --dir 數(shù)據(jù)庫(kù)備份文件路徑
MongoDB數(shù)據(jù)導(dǎo)入與導(dǎo)出導(dǎo)出工具:
mongoexport
mongoexport -d dbname -c collectionname -o file --type json/csv -f field
參數(shù)說(shuō)明:
- d :數(shù)據(jù)庫(kù)名
- c :collection名
- o :輸出的文件名
- -type : 輸出的格式虹钮,默認(rèn)為json
- f :輸出的字段聋庵,如果-type為csv,則需要加上-f "字段名"
示例:
導(dǎo)出json
mongoexport -d class1804 -c books -o ~/桌面/dump/books.json --type json
導(dǎo)出csv
mongoexport -d class1804 -c books -o ~/桌面/dump/books.csv --type csv -f 'by_user,likes'數(shù)據(jù)導(dǎo)入:
mongoimport
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv
參數(shù)說(shuō)明:
- d:數(shù)據(jù)庫(kù)名
- c:collection名
- -type:導(dǎo)入的格式默認(rèn)json
- f:導(dǎo)入的字段名
- -headerline:如果導(dǎo)入的格式是csv芙粱,則可以使用第一行的標(biāo)題作為導(dǎo)入的字段
- -file:要導(dǎo)入的文件
示例:
導(dǎo)入json
mongoimport -d class1712B -c books --file ~/桌面/dump/books --type json
導(dǎo)入csv
mongoimport -d class1712B -c info --file ~/桌面/dump/books --headerline --type csv
什么是復(fù)制
- 復(fù)制提供了數(shù)據(jù)的冗余備份祭玉,并在多個(gè)服務(wù)器上存儲(chǔ)數(shù)據(jù)副本,提高了數(shù)據(jù)的可用性春畔,并可以保證數(shù)據(jù)的安全性
- 復(fù)制還允許從硬件故障和服務(wù)中斷中恢復(fù)數(shù)據(jù) 為什么要復(fù)制
- 數(shù)據(jù)備份
- 數(shù)據(jù)災(zāi)難恢復(fù)
- 讀寫分離
- 高(24* 7)數(shù)據(jù)可用性
- 無(wú)宕機(jī)維護(hù)
- 副本集對(duì)應(yīng)用程序是透明
復(fù)制的工作原理
- 復(fù)制至少需要兩個(gè)節(jié)點(diǎn)A脱货、B...
- A是主節(jié)點(diǎn),負(fù)責(zé)處理客戶端請(qǐng)求
- 其余的都是從節(jié)點(diǎn)律姨,負(fù)責(zé)復(fù)制主節(jié)點(diǎn)上的數(shù)據(jù)
- 節(jié)點(diǎn)常見的搭配方式為:一主一從振峻、一主多從
- 主節(jié)點(diǎn)記錄在其上的所有操作,從節(jié)點(diǎn)定期輪詢主節(jié)點(diǎn)獲取這些操作线召,然后對(duì)自己的數(shù)據(jù)副本執(zhí)行這些操作,從而保證從節(jié)點(diǎn)的數(shù)據(jù)與主節(jié)點(diǎn)一致
- 主節(jié)點(diǎn)與從節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交互保障數(shù)據(jù)的一致性
- 讀寫分離多矮,基本的原理是讓主數(shù)據(jù)庫(kù)處理事務(wù)性增缓淹、改、刪操作(INSERT塔逃、UPDATE讯壶、DELETE),而從數(shù)據(jù)庫(kù)處理SELECT查詢操作湾盗。數(shù)據(jù)庫(kù)復(fù)制被用來(lái)把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫(kù),讀寫分離的目的是為了實(shí)現(xiàn)高并發(fā)場(chǎng)景下的請(qǐng)求分流伏蚊,避免對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)過(guò)于集中,導(dǎo)致性能下降甚至是宕機(jī)格粪。
直接使用主從復(fù)制局限
(1)主從復(fù)制在master宕機(jī)后躏吊,沒(méi)有自動(dòng)選舉master機(jī)制,導(dǎo)致主節(jié)點(diǎn)服務(wù)一掛帐萎,便不能對(duì)外提供增刪改操作比伏。
(2)所有增刪改操作都是針對(duì)主節(jié)點(diǎn)進(jìn)行操作,可能導(dǎo)致主節(jié)點(diǎn)性能下降疆导。
(3)從節(jié)點(diǎn)對(duì)主節(jié)點(diǎn)的數(shù)據(jù)都是全量拷貝赁项,對(duì)主從節(jié)點(diǎn)的壓力都是不小的。
復(fù)制的特點(diǎn)
- N 個(gè)節(jié)點(diǎn)的集群
- 任何節(jié)點(diǎn)可作為主節(jié)點(diǎn)
- 所有寫入操作都在主節(jié)點(diǎn)上
- 自動(dòng)故障轉(zhuǎn)移
- 自動(dòng)恢復(fù)