Mongodb 基本操作

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é)尾损话。

  1. .和$有特別的意義,只有在特定環(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ù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市悠菜,隨后出現(xiàn)的幾起案子舰攒,更是在濱河造成了極大的恐慌,老刑警劉巖悔醋,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摩窃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡篙顺,警方通過(guò)查閱死者的電腦和手機(jī)偶芍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)德玫,“玉大人匪蟀,你說(shuō)我怎么就攤上這事≡咨” “怎么了材彪?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)琴儿。 經(jīng)常有香客問(wèn)我段化,道長(zhǎng),這世上最難降的妖魔是什么造成? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任显熏,我火速辦了婚禮,結(jié)果婚禮上晒屎,老公的妹妹穿的比我還像新娘喘蟆。我一直安慰自己,他們只是感情好鼓鲁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布蕴轨。 她就那樣靜靜地躺著,像睡著了一般骇吭。 火紅的嫁衣襯著肌膚如雪橙弱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天燥狰,我揣著相機(jī)與錄音棘脐,去河邊找鬼。 笑死龙致,一個(gè)胖子當(dāng)著我的面吹牛荆残,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播净当,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼内斯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蕴潦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起俘闯,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潭苞,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后真朗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體此疹,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年遮婶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝗碎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡旗扑,死狀恐怖蹦骑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情臀防,我是刑警寧澤眠菇,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站袱衷,受9級(jí)特大地震影響捎废,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜致燥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一登疗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嫌蚤,春花似錦辐益、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)艳悔。三九已至急凰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猜年,已是汗流浹背抡锈。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乔外,地道東北人床三。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像杨幼,于是被迫代替她去往敵國(guó)和親撇簿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子聂渊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • mongodb介紹 1.什么是mongodb? mongodb 是由c++語(yǔ)言編寫的,是一個(gè)基于分布式文件存儲(chǔ)的開...
    咻咻咻滴趙大妞閱讀 283評(píng)論 0 0
  • 簡(jiǎn)介 MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的NoSQL數(shù)據(jù)庫(kù) 由C++語(yǔ)言編寫四瘫,運(yùn)行穩(wěn)定汉嗽,性能高 旨在為 WE...
    大熊_7d48閱讀 37,072評(píng)論 1 9
  • 1. MongoDB 簡(jiǎn)介 MongoDB是一個(gè)可擴(kuò)展的高性能,開源找蜜,模式自由饼暑,面向文檔的NoSQL,基于分布式文...
    rhlp閱讀 1,117評(píng)論 0 3
  • -z#啟動(dòng)等命令"""sudo service mongod|mongodb startsudo service ...
    木頭的男人閱讀 563評(píng)論 0 1
  • 簡(jiǎn)介 NoSQL : 全名為Not Only SQL, 指的是非關(guān)系型的數(shù)據(jù)庫(kù) 隨著訪問(wèn)量上升, 網(wǎng)站的數(shù)據(jù)庫(kù)性能...
    奮斗的老王閱讀 3,042評(píng)論 4 47