mongodb基本操作

Mongodb的特點:

  • 模式自由:可以把不同結構的文檔存儲在同一個數(shù)據(jù)庫里
  • 面向集合的儲存:適合儲存JSON風格文件的形式
  • 完整的索引支持:對任何屬性可索引
  • 復制和高可用性:支持服務器之間的數(shù)據(jù)復制嗎尔觉,支持主從模式和服務器間的相互復制,目的是提供冗余及自動故障轉移
  • 自動分片:支持水平的數(shù)據(jù)庫集群袜漩,可動態(tài)添加額外的機器
  • 豐富的查詢:豐富的查詢表達式挺邀,查詢指令使用JSON形式的標記和查詢文檔中內嵌的對象和數(shù)組
  • 快速就地更新:查詢優(yōu)化器會分析查詢表達式那伐,并生成一個高效的查詢計劃
  • 高效的傳統(tǒng)儲存方式:支持二進制數(shù)據(jù)集大型對象(如:圖片或照片)

基本操作

  • MongoDB將數(shù)據(jù)儲存為一個文檔,數(shù)據(jù)結構由鍵值對組成(key=>value)
  • MongoDB文檔類似于JSON對象鸯乃,字段值可以包含其他文檔蠢涝、數(shù)組玄呛、文檔數(shù)組
  • 安裝管理mongodb環(huán)境、完成數(shù)據(jù)庫和二、集合的管理
  • 數(shù)據(jù)的增加徘铝、修改、刪除惯吕、查詢
SQL屬于/概念 MongoDB術語/概念 解釋/說明
database database 數(shù)據(jù)庫
table collection 數(shù)據(jù)庫表/集合
row document 數(shù)據(jù)記錄行/文檔
column field 數(shù)據(jù)字段/域
index index 索引
table joins 表連接,MongoDB不支持
primary key primary key 主鍵,MongoDB自動將_id字段設置為主鍵

三元素:數(shù)據(jù)庫惕它、集合、文檔

  • 數(shù)據(jù)庫是一個集合的物理容器
  • 集合是關系型數(shù)據(jù)庫中的表
  • 文檔對應著關系型數(shù)據(jù)庫中的行
    1). 文檔废登,就是一個對象淹魄,由鍵值對構成,是json的擴展Bson形式 {'name':'guojing','gender':'男’}
    2). 集合:類似于關系數(shù)據(jù)庫中的表堡距,儲存多個文檔揭北,結構不固定,如可以存儲如下文檔在一個集合中 {'name':'guojing','gender':'男'} {'name':'huangrong','age':18} {'book':'shuihuzhuan','heros':'108’}
    3). 一個mongodb中可以建立多個數(shù)據(jù)庫
    4). 數(shù)據(jù)庫:是一個集合的物理容器吏颖,一個數(shù)據(jù)庫中可以包含多個集合

1.不能是空字符串("")。
2.不得含有' '(空格)恨樟、.半醉、、/劝术、\和\0 (空宇符)缩多。 3.應全部小寫。 4.最多64字節(jié) **5)**. 集合:集合中可以存儲多個文檔 1.集合名不能是空字符串""养晋。 2.集合名不能含有\(zhòng)0字符(空字符)衬吆,這個字符表示集合名的結尾。 3.集合名不能以"system."開頭绳泉,這是為系統(tǒng)集合保留的前綴逊抡。 4.用戶創(chuàng)建的集合名字不能含有保留字符。有些驅動程序的確支持在集合名里面包含零酪,這是因為某些系統(tǒng)生成的集合中包含該字符冒嫡。除非你要訪問這種系統(tǒng)創(chuàng)建的集合拇勃,否則千萬不要在名字里出現(xiàn)

6). 文檔:就是一個對象孝凌,由鍵值對構成方咆,是json的擴展Bson(可以理解為在JSON的基礎上添加了一些json中沒有的數(shù)據(jù)類型)形式。 需要注意的是:

1.文檔中的鍵/值對是有序的蟀架。
2.文檔中的值不僅可以是在雙引號里面的字符串瓣赂,還可以是其他幾種數(shù)據(jù)類型(甚至可以是整個嵌入的文檔)。
3.MongoDB區(qū)分類型和大小寫片拍。
4.MongoDB的文檔不能有重復的鍵煌集。
5.文檔的鍵是字符串。除了少數(shù)例外情況穆碎,鍵可以使用任意UTF-8字符牙勘。

文檔鍵命名規(guī)范:

1.鍵不能含有\(zhòng)0 (空字符)。這個字符用來表示鍵的結尾所禀。

  1. .和$有特別的意義方面,只有在特定環(huán)境下才能使用。

啟動MongoDB

啟動MongoDB服務

sudo service mongod start

  • 停止色徘,停止后輸入將不能啟動shell

sudo service mongod stop

  • 重置服務

sudo service mongod restop

  • 啟動mongodb客戶端

mongo

  • 終端退出連接

exit 或 ctrl+c

MongoDB的基本操作

  • 查看當前數(shù)據(jù)庫名稱

db

  • 列出所有在物理上存在的數(shù)據(jù)庫

show dbs

  • 切換數(shù)據(jù)庫 如果數(shù)據(jù)庫不存在恭金,則指向數(shù)據(jù)庫,但不創(chuàng)建褂策,直到插入數(shù)據(jù)或創(chuàng)建集合時數(shù)據(jù)庫才被創(chuàng)建

use 數(shù)據(jù)庫名稱

  • 查看當前數(shù)據(jù)庫信息

db.stats()

db:當前數(shù)據(jù)庫的名字横腿。
collections:當前數(shù)據(jù)庫的集合數(shù)。
objects:當前數(shù)據(jù)庫所有集合總所包含的對象
(即文檔)的數(shù)量斤寂。
avgObjSize:每個文檔的平均大泄⒑浮(以字節(jié)
為單位)。
dataSize:此數(shù)據(jù)庫中保存的未壓縮數(shù)據(jù)的
總大小遍搞,不是指占有磁盤大小罗侯,單位是bytes。
storageSize:分配給此數(shù)據(jù)庫的集合用于
存儲文檔的空間總量溪猿,也就是當前數(shù)據(jù)庫占
有磁盤大小钩杰,單位是bytes。
numExtents:當前數(shù)據(jù)庫所有集合包含的
擴展數(shù)量的統(tǒng)計诊县。
indexes:數(shù)據(jù)庫中包含的所有集合的索引
總數(shù),也就是system.indexes表數(shù)據(jù)行數(shù)依痊。
indexSize:此數(shù)據(jù)庫上創(chuàng)建的所有索引的
總大小避除,單位是bytes。

  • 數(shù)據(jù)庫刪除:刪除當前指向的數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在,則什么也不做

db.dropDatabase()

集合的相關操作

  • 創(chuàng)建集合

db.createCollection(name, options)

  • name是要創(chuàng)建的集合的名稱
  • options是一個文檔驹饺,用于指定集合的配置 選項參數(shù)是可選的钳枕,所以只需要到指定的集合名稱。以下是可以使用的選項列表:
字段 類型 描述
capped 布爾 (可選)如果為 true赏壹,則創(chuàng)建固定集合鱼炒。固定集合是指有著固定大小的集合,當達到最大值時蝌借,它會自動覆蓋最早的文檔昔瞧。 當該值為 true 時,必須指定 size 參數(shù)菩佑。
autoIndexId 布爾 (可選)如為 true自晰,自動在 _id 字段創(chuàng)建索引。默認為 false稍坯。
size 數(shù)值 (可選)為固定集合指定一個最大值.當文檔達到上限時酬荞,會將之前的數(shù)據(jù)覆蓋,單位為字節(jié)瞧哟。如果 capped 為 true混巧,也需要指定該字段。
max 數(shù)值 (可選)指定固定集合中包含文檔的最大數(shù)量勤揩。
  • 例1:不限制集合大小

db.createCollection("stu")

  • 例2:限制集合大小咧党,后面學會插入語句后可以查看效果

參數(shù)capped:默認值為false表示不設置上限,值為
true表示設置上限
參數(shù)size:當capped值為true時陨亡,需要指定此參數(shù)
傍衡,表示上限大小,當文檔達到上限時负蠕,會將之前的數(shù)
據(jù)覆蓋蛙埂,單位為字節(jié)

db.createCollection(
"sub",
{

capped : true,
size : 10
}
)

  • 例3:創(chuàng)建固定集合 sub,且文檔最大個數(shù)為 100 個遮糖。

db.createCollection(
"sub",
{
capped : true,
size : 10 ,
max:100
}
)

  • 查看數(shù)據(jù)庫集合

show collections:當前數(shù)據(jù)庫的集合數(shù)箱残。

  • 刪除集合

db.集合名稱.drop()
如果成功刪除選定集合,則 drop() 方法返回 true止吁,否則返回 false

文檔

文檔是一組鍵值對(即BSON)。MongoDB 的文檔不需要設置相同的字段燎悍,并且相同的字段不需要相同的數(shù)據(jù)類型敬惦,這與關系型數(shù)據(jù)庫有很大的區(qū)別,也是 MongoDB 非常突出的特點谈山。
再次對比關系型數(shù)據(jù)庫與非關系型數(shù)據(jù)庫的相關術語: 下表列出了 RDBMS 與 MongoDB 對應的術語:

RDBMS MongoDB
數(shù)據(jù)庫 數(shù)據(jù)庫
表格 集合
文檔
字段
表聯(lián)合 嵌入文檔
主鍵 主鍵 (MongoDB 提供了 key 為 _id )

MongoDB 數(shù)據(jù)類型

下表為MongoDB中常用的幾種數(shù)據(jù)類型俄删。

數(shù)據(jù)類型 描述
String 字符串。存儲數(shù)據(jù)常用的數(shù)據(jù)類型。在 MongoDB 中畴椰,UTF-8 編碼的字符串才是合法的臊诊。
Integer 整型數(shù)值。用于存儲數(shù)值斜脂。根據(jù)你所采用的服務器抓艳,可分為 32 位或 64 位。
Boolean 布爾值帚戳。用于存儲布爾值(真/假)玷或。
Double 雙精度浮點值。用于存儲浮點值片任。
Array 用于將數(shù)組或列表或多個值存儲為一個鍵偏友。
Timestamp 時間戳。記錄文檔修改或添加的具體時間对供。
Object 用于嵌入式的文檔位他,即一個值為一個文檔
Null 用于創(chuàng)建空值。
Date 日期時間产场。用 UNIX 時間格式來存儲當前日期或時間鹅髓。你可以指定自己的日期時間:創(chuàng)建 Date 對象,傳入年月日信息涝动。
Object ID 對象 ID迈勋。用于創(chuàng)建文檔的 ID。
Binary Data 二進制數(shù)據(jù)醋粟。用于存儲二進制數(shù)據(jù)靡菇。

ObjectId

ObjectId 類似唯一主鍵,可以很快的去生成和排序

  • 每個文檔都有一個屬性米愿,為_id厦凤,保證每個文檔的唯一性
  • 可以自己去設置_id插入文檔
  • 如果沒有提供,那么MongoDB為每個文檔提供了一個獨特的_id育苟,類型為objectID
  • objectID是一個12字節(jié)的十六進制數(shù) 前4個字節(jié)為當前時間戳 接下來3個字節(jié)的機器ID 接下來的2個字節(jié)中MongoDB的服務進程id 最后3個字節(jié)是簡單的增量值

插入文檔

  • 單條插入

db.集合名稱.insert(document)

注意:插入文檔時较鼓,如果不指定_id參數(shù),MongoDB會為文檔分配一個唯一的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)

查詢全部文檔

db.集合名稱.find()

更新文檔

MongoDB 使用 update() 和 save() 方法來更新集合中的文檔违柏。兩個函數(shù)是有區(qū)別的博烂。

  • update() 方法 update() 方法用于更新已存在的文檔

db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
}
)

參數(shù)說明

  • query : update的查詢條件亮蛔,類似sql update查詢內where后面的篙贸。
  • update : update的對象和一些更新的操作符(如,inc...)等,也可以 理解為sql update查詢內set后面的
  • upsert : 可選丈咐,這個參數(shù)的意思是馍惹,如果不存在update 的記錄躺率,是否插入objNew,true為插入玛界,默認是false,不插 入悼吱。
  • multi : 可選慎框,mongodb 默認是false,只更新找到的第 一條記錄,如果這個參數(shù)為true,就把按條件查出來多條記錄 全部更新后添。
    例1:全文檔更新

db.stu.update(
{name:'xxxxx'},
{name:'張xxx'}
)

例2:指定屬性更新笨枯,通過操作符$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() 方法通過傳入的文檔來替換已有文檔,如果文檔的_id已經(jīng)存在則修改,如果文檔的_id不存在則添加

db.集合名稱.save(document)
db.stu.save(
{
_id:'20180820101010',
'name':'跟新'
}
)

pretty()

該函數(shù)吕朵,將數(shù)據(jù)以格式化的方式展示

db.集合名稱.find().pretty()

  • 刪除文檔
    remove() 方法的基本語法格式如下所示:

db.collection.remove(
<query>,
{justOne: <boolean>,}
)

參數(shù)說明

  • query :(可選)刪除的文檔的條件猎醇。
  • justOne : (可選)如果設為 true 或 1,則只刪除一個文檔努溃。

db.集合名稱.remove(document)

  • 例1:只刪除1條硫嘶,1表示是否只刪除一條為true的意思

db.集合名稱.remove(
document,1
)
db.集合名稱.remove(
document,
{justOne:true}
)

  • 例2:表示刪除全部

db.集合名稱.remove({})基本的數(shù)據(jù)查詢
db.集合名稱.find({條件文檔})

  • findOne():查詢,只返回第一個

db.集合名稱.findOne({條件文檔})

  • 例:查詢出姓名等于李某某的學生

db.stu.find({name:'李某某'})
db.stu.findOne({name:'李某某'})比較運算符

  • 等于梧税,默認是等于判斷沦疾,沒有運算符
  • 小于$lt
  • 小于或等于$lte
  • 大于$gt
  • 大于或等于$gte
  • 不等于$ne
    例:查詢年齡大于或等于18的學生

db.stu.find({age:{$gte:18}})

邏輯運算符

查詢時可以有多個條件,多個條件之間需要通過邏輯運算符連接
邏輯與:默認是邏輯與的關系
例:查詢年齡大于或等于18第队,并且性別為1的學生

db.stu.find(
{
age:{$gte:18},
gender:1
}
)

邏輯或:使用$or

例4:查詢年齡大于18哮塞,或性別為0的學生

db.stu.find(
{
or:[ {age:{gt:18}},
{gender:1}
]
}
)

and和or一起使用

例5:查詢年齡大于18或性別為0的學生,并且學生的姓名為gj

db.stu.find(
{
or:[ {age:{gte:18}},
{gender:1}
],
name:'gj'
}
)


范圍運算符

使用"in"凳谦,"nin" 判斷是否在某個范圍內 例:查詢年齡為18忆畅、28的學生

db.stu.find(
{
age:{$in:[18,28]}
}
)

支持正則表達式

使用//或$regex編寫正則表達式 例:查詢姓李的學生

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()方法來跳過指定數(shù)量的數(shù)據(jù)尸执,skip方法同樣接受一個數(shù)字參數(shù)作為跳過的記錄條數(shù)家凯。

db.集合名稱.find().skip(num)

limit() 方法、Skip() 方法 同時使用如失,不分先后順序 表示跳過多少條绊诲,返回多少條
查詢第5至8條數(shù)據(jù)

db.stu.find().limit(4).skip(5)
db.stu.find().skip(5).limit(4)

sort() 方法排序

**sort() **方法對數(shù)據(jù)進行排序,sort() 方法可以通過參數(shù)指定排序的字段褪贵,并使用 1 和 -1 來指定排序的方式掂之,其中 1 為升序排列,而 -1 是用于降序排列脆丁。

  • 升序

db.集合名稱.find().sort({排序字段:1})

  • 降序

db.集合名稱.find().sort({排序字段:-1})

根據(jù)多個字段排序: 例:先根據(jù)年齡做降序世舰,再根據(jù)性別做升序

db.集合名稱.find().sort({age:-1,gender:1})

注意: skip(), limilt(), sort()三個放在一起執(zhí)行的時候,執(zhí)行的順序是先 sort(), 然后是 skip()槽卫,最后是顯示的 limit()冯乘。

distinct() 去重

db.集合名稱.distinct('去重字段',{條件})

例:查找年齡大于20的姓名(去重)

db.集合名稱.distinct('name',{age:{$gt:20}})
project投影(可以指定想要返回的字段)
在查詢到的返回結果中,只選擇必要的字段晒夹,而不是選擇一個文檔的整個字段
參數(shù)為字段與值裆馒,值為1表示顯示,值為0不顯示
db.集合名稱.find({},{字段名稱:0,...})

count() 統(tǒng)計個數(shù)

db.集合名稱.count({條件})

  • 表示返回集合中的文檔數(shù)量

db.集合名稱.find().count()
db.集合名稱.find({條件}).count()

  • 在count()函數(shù)中添加條件
    例:統(tǒng)計年齡大于20的男生人數(shù)

db.集合名稱.count(
{
age:{$gt:20},
gender:1})

MongoDB的聚合

aggregate() 方法

MongoDB中聚合的方法使用aggregate() 語法
aggregate() 方法的基本語法格式如下所示:

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

管道的概念

  • 管道在Unix和Linux中一般用于將當前命令的輸出結果作為下一個命令的參數(shù)丐怯。
  • MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢后將結果傳遞給下一個管道處理喷好。管道操作是可以重復的。
  • 表達式:處理輸入文檔并輸出读跷。表達式是無狀態(tài)的梗搅,只能用于計算當前聚合管道的文檔,不能處理其它的文檔效览。
    聚合框架中常用的幾個操作:

$group:將集合中的文檔分組无切,可用于統(tǒng)計結果。
$project:修改輸入文檔的結構丐枉《呒可以用來重命名、增加或
刪除域瘦锹,也可以用于創(chuàng)建計算結果以及嵌套文檔籍嘹。
$match:用于過濾數(shù)據(jù),只輸出符合條件的文檔,$match使用MongoDB的標準查詢操作弯院。

$limit:用來限制MongoDB聚合管道返回的文檔數(shù)辱士。
$skip:在聚合管道中跳過指定數(shù)量的文檔,并返回余下的文
檔听绳。
$unwind:將文檔中的某一個數(shù)組類型字段拆分成多條颂碘,每條
包含數(shù)組中的一個值。
$sort:將輸入文檔排序后輸出椅挣。
$sum: 計算總和
$avg:計算平均值
$min:獲取最小值
$max:獲取最大值
$count:計算總數(shù)
$push:插入一個值到元組
$first:排序獲取第一個文檔數(shù)據(jù)
$last:排序獲取最后一個文檔數(shù)據(jù)

管理員權限

  • root:只在admin數(shù)據(jù)庫中可用头岔,超級賬號,超級權限
  • Read:允許用戶讀取指定的數(shù)據(jù)庫
  • readWrite:允許用戶讀寫指定數(shù)據(jù)庫

創(chuàng)建超級管理用戶

use admindb.createUser({   user:'admin',pwd:'123',roles:[{role:'root',db:'admin'}]})

啟用安全認證

新版本 注意:keys and values之間一定要加空格, 否則解析會報錯

security:
  authorization: enabled

低版本

或者修改配置文件將auth=true前面的注釋拿掉然后保存并退出

修改普通用戶權限或密碼
  • 修改用戶:可以修改pwd贴妻、roles屬性
  • 注意這里只有超級管理員才有權限修改普通用戶的密碼和管理權限
  • 修改用戶密碼(切換到有權限操作的數(shù)據(jù)庫下)

db.updateUser(‘ljh',{pwd:'456'})

  • 添加用戶權限(切換到有權限操作的數(shù)據(jù)庫下)

db.grantRolesToUser('username',[{role:'',db:''}])

  • 移除用戶權限(切換到有權限操作的數(shù)據(jù)庫下)

db.revokeRolesFromUser('username',[{role:'',db:''}])

  • 刪除用戶(方式一)(切換到有權限操作的數(shù)據(jù)庫下)

db.dropUser('username')

  • 刪除用戶 (方式二)

use admin db.system.users.remove({user:'username'})

MongoDB 備份(mongodump)

  • 在Mongodb中我們使用mongodump命令來備份MongoDB數(shù)據(jù)切油。該命令可以導出所有數(shù)據(jù)到指定目錄中。

mongodump -h dbhost -d dbname -o dbdirectory

  • -h: MongDB所在服務器地址名惩,例如:127.0.0.1澎胡,當然也可以指定端口號:127.0.0.1:27017
  • -d: 需要備份的數(shù)據(jù)庫實例,例如:test
  • -o: 備份的數(shù)據(jù)存放位置娩鹉,例如:c:\data\dump攻谁,當然該目錄需要提前建立,在備份完成后弯予,系統(tǒng)自動在dump目錄下建立一個test目錄戚宦,這個目錄里面存放該數(shù)據(jù)庫實例的備份數(shù)據(jù)。
如果沒有開啟權限

mongodump -h 127.0.0.1:27017 -d 數(shù)據(jù)庫名稱 -o ~/Desktop/數(shù)據(jù)庫備份的路徑
mongodump -h 127.0.0.1:27017 -o ~/Desktop/數(shù)據(jù)庫備份的路徑

如果開啟了權限設置(使用超級管理員權限)

我們也可以使用賬號密碼的方式備份指定用戶的數(shù)據(jù)庫
設置了超級管理員也可以使用如下方法備份

mongodump -u username -p password --authenticationDatabase 'admin' -d dbname -o dbpath

恢復備份

mongodb使用 mongorestore 命令來恢復備份的數(shù)據(jù)锈嫩。

mongorestore -h hostname:port -d dbname --dir path

  • -h (host): MongoDB所在服務器地址受楼,默認為: localhost:27017
  • -d (db): 需要恢復的數(shù)據(jù)庫實例垦搬,例如:test,當然這個名稱也可以和備份時候的不一樣艳汽,比如test2
  • --dir: 指定備份的目錄
如果沒有開啟權限

mongorestore -h 127.0.0.1:27017 -d 數(shù)據(jù)庫名稱 --dir 數(shù)據(jù)庫備份文件路徑
mongorestore -h 127.0.0.1 -dir 數(shù)據(jù)庫備份文件路徑

下面是我添加了管理員權限之后的備份命令如果開啟了權限設置(使用超級管理員權限)

mongorestore -u username -p password --authenticationDatabase 'admin' -d 數(shù)據(jù)庫名稱 --dir 數(shù)據(jù)庫備份文件路徑

MongoDB數(shù)據(jù)導入與導出導出工具:

mongoexport

mongoexport -d dbname -c collectionname -o file --type json/csv -f field

參數(shù)說明:

  • d :數(shù)據(jù)庫名
  • c :collection名
  • o :輸出的文件名
  • -type : 輸出的格式猴贰,默認為json
  • f :輸出的字段,如果-type為csv河狐,則需要加上-f "字段名"
    示例:

導出json

mongoexport -d class1804 -c books -o ~/桌面/dump/books.json --type json

導出csv

mongoexport -d class1804 -c books -o ~/桌面/dump/books.csv --type csv -f 'by_user,likes'數(shù)據(jù)導入:

mongoimport

mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv

參數(shù)說明:

  • d:數(shù)據(jù)庫名
  • c:collection名
  • -type:導入的格式默認json
  • f:導入的字段名
  • -headerline:如果導入的格式是csv米绕,則可以使用第一行的標題作為導入的字段
  • -file:要導入的文件
    示例:
    導入json

mongoimport -d class1712B -c books --file ~/桌面/dump/books --type json

導入csv

mongoimport -d class1712B -c info --file ~/桌面/dump/books --headerline --type csv

什么是復制

  • 復制提供了數(shù)據(jù)的冗余備份,并在多個服務器上存儲數(shù)據(jù)副本馋艺,提高了數(shù)據(jù)的可用性栅干,并可以保證數(shù)據(jù)的安全性
  • 復制還允許從硬件故障和服務中斷中恢復數(shù)據(jù) 為什么要復制
  • 數(shù)據(jù)備份
  • 數(shù)據(jù)災難恢復
  • 讀寫分離
  • 高(24* 7)數(shù)據(jù)可用性
  • 無宕機維護
  • 副本集對應用程序是透明

復制的工作原理

  • 復制至少需要兩個節(jié)點A、B...
  • A是主節(jié)點捐祠,負責處理客戶端請求
  • 其余的都是從節(jié)點碱鳞,負責復制主節(jié)點上的數(shù)據(jù)
  • 節(jié)點常見的搭配方式為:一主一從、一主多從
  • 主節(jié)點記錄在其上的所有操作雏赦,從節(jié)點定期輪詢主節(jié)點獲取這些操作劫笙,然后對自己的數(shù)據(jù)副本執(zhí)行這些操作,從而保證從節(jié)點的數(shù)據(jù)與主節(jié)點一致
  • 主節(jié)點與從節(jié)點進行數(shù)據(jù)交互保障數(shù)據(jù)的一致性
  • 讀寫分離星岗,基本的原理是讓主數(shù)據(jù)庫處理事務性增填大、改、刪操作(INSERT俏橘、UPDATE允华、DELETE),而從數(shù)據(jù)庫處理SELECT查詢操作寥掐。數(shù)據(jù)庫復制被用來把事務性操作導致的變更同步到集群中的從數(shù)據(jù)庫,讀寫分離的目的是為了實現(xiàn)高并發(fā)場景下的請求分流靴寂,避免對數(shù)據(jù)庫的訪問過于集中,導致性能下降甚至是宕機召耘。

直接使用主從復制局限

(1)主從復制在master宕機后百炬,沒有自動選舉master機制,導致主節(jié)點服務一掛污它,便不能對外提供增刪改操作剖踊。
(2)所有增刪改操作都是針對主節(jié)點進行操作,可能導致主節(jié)點性能下降衫贬。
(3)從節(jié)點對主節(jié)點的數(shù)據(jù)都是全量拷貝德澈,對主從節(jié)點的壓力都是不小的固惯。

復制的特點

  • N 個節(jié)點的集群
  • 任何節(jié)點可作為主節(jié)點
  • 所有寫入操作都在主節(jié)點上
  • 自動故障轉移
  • 自動恢復
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末忽肛,一起剝皮案震驚了整個濱河市源祈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件售貌,死亡現(xiàn)場離奇詭異恒削,居然都是意外死亡斑粱,警方通過查閱死者的電腦和手機尚揣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門名秀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藕溅,“玉大人匕得,你說我怎么就攤上這事〗肀恚” “怎么了汁掠?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長集币。 經(jīng)常有香客問我考阱,道長,這世上最難降的妖魔是什么惠猿? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任羔砾,我火速辦了婚禮,結果婚禮上偶妖,老公的妹妹穿的比我還像新娘姜凄。我一直安慰自己,他們只是感情好趾访,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布态秧。 她就那樣靜靜地躺著,像睡著了一般扼鞋。 火紅的嫁衣襯著肌膚如雪申鱼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天云头,我揣著相機與錄音捐友,去河邊找鬼。 笑死溃槐,一個胖子當著我的面吹牛匣砖,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼猴鲫,長吁一口氣:“原來是場噩夢啊……” “哼对人!你這毒婦竟也來了?” 一聲冷哼從身側響起拂共,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤牺弄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宜狐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體势告,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年抚恒,在試婚紗的時候發(fā)現(xiàn)自己被綠了培慌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡柑爸,死狀恐怖,靈堂內的尸體忽然破棺而出盒音,到底是詐尸還是另有隱情表鳍,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布祥诽,位于F島的核電站譬圣,受9級特大地震影響,放射性物質發(fā)生泄漏雄坪。R本人自食惡果不足惜厘熟,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望维哈。 院中可真熱鬧绳姨,春花似錦、人聲如沸阔挠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽购撼。三九已至跪削,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間迂求,已是汗流浹背碾盐。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留揩局,地道東北人毫玖。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親孕豹。 傳聞我的和親對象是個殘疾皇子涩盾,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容