MongoDB 基礎(chǔ)操作(二)

MongoDB 索引

  • 對某個鍵按照升續(xù)或降續(xù)創(chuàng)建索引咏连;
  • 查詢時首先根據(jù)查詢條件查找到對應(yīng)的索引條目腻扇,然后找對索引條目對應(yīng)的文檔指針(文檔在磁盤上的存儲位置)糠悼,根據(jù)文檔指針再去磁盤中找到相應(yīng)的文檔藐不;
  • 整個過程不需要掃描全表滋恬,速度比較快聊训。
  • db.集合名.ensureIndex({KEY: NUMBER}) 對數(shù)據(jù)添加索引
ensureIndex() 必選參數(shù)說明:
  • KEY:要創(chuàng)建的索引字段
  • NUMBER:使用 1 和 -1 指定索引排序的方式,其中 1 為升序排列恢氯,-1 位降序排列带斑。
ensureIndex() 可選參數(shù)說明:
Parameter Type Description
background Boolean 建索引過程會阻塞其它數(shù)據(jù)庫操作,background 可指定以后臺方式創(chuàng)建索引勋拟,即增加 "background" 可選參數(shù)勋磕。"background" 默認(rèn)值為 false
unique Boolean 建立的索引是否唯一指黎。指定為 true 創(chuàng)建唯一索引。默認(rèn)值為 false州丹。
name string 索引的名稱醋安。如果未指定,MongoDB 的通過連接索引的字段名和排序順序生成一個索引名稱墓毒。
dropDups Boolean 在建立唯一索引時是否刪除重復(fù)記錄,指定 true 創(chuàng)建唯一索引吓揪。默認(rèn)值為 false
sparse Boolean 對文檔中不存在的字段數(shù)據(jù)不啟用索引所计;這個參數(shù)需要特別注意柠辞,如果設(shè)置為 true 的話,在索引字段中不會查詢出不包含對應(yīng)字段的文檔主胧,默認(rèn)值為 false叭首。
expireAfterSeconds integer 指定一個以秒為單位的數(shù)值,完成 TTL 設(shè)定踪栋,設(shè)定集合的生存時間焙格。
v index version 索引的版本號。默認(rèn)的索引版本取決于 mongod 創(chuàng)建索引時運(yùn)行的版本夷都。
weights document 索引權(quán)重值眷唉,數(shù)值在 1 到 99,999 之間,表示該索引相對于其他索引字段的得分權(quán)重囤官。
default_language string 對于文本索引冬阳,該參數(shù)決定了停用詞及詞干和詞器的規(guī)則的列表,默認(rèn)為英語党饮。
language_override string 對于文本索引肝陪,該參數(shù)指定了包含在文檔中的字段名,語言覆蓋默認(rèn)的language刑顺,默認(rèn)值為 language见坑。

MongoDB 聚合

  • 聚合操作主要用于對數(shù)據(jù)的批量處理嚷掠,往往將記錄按條件分組以后,然后再進(jìn)行一系列操作荞驴,例如不皆,求最大值、最小值熊楼、平均值霹娄,求和等操作。

  • 聚合操作還能夠?qū)τ涗涍M(jìn)行復(fù)雜的操作鲫骗,主要用于數(shù)理統(tǒng)計(jì)和數(shù)據(jù)挖掘犬耻。

  • db.集合名.aggregate(AGGREGATE_OPERATION) 聚合

例:
db.test.aggregate([{$group: {_id: "$status", num: {$sum: 1}}}])
聚合求和
聚合表達(dá)式
表達(dá)式 描述 實(shí)例
$sum 計(jì)算總和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 計(jì)算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 獲取集合中所有文檔對應(yīng)值得最小值执泰。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 獲取集合中所有文檔對應(yīng)值得最大值枕磁。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在結(jié)果文檔中插入值到一個數(shù)組中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在結(jié)果文檔中插入值到一個數(shù)組中术吝,但不創(chuàng)建副本计济。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根據(jù)資源文檔的排序獲取第一個文檔數(shù)據(jù)。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根據(jù)資源文檔的排序獲取最后一個文檔數(shù)據(jù) db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
聚合管道排苍、聚合框架的常用操作
操作 描述 實(shí)例
$project 修改輸入文檔的結(jié)構(gòu)沦寂。可以用來重命名淘衙、增加或刪除域传藏,也可以用于創(chuàng)建計(jì)算結(jié)果以及嵌套文檔。 db.article.aggregate({$project : {_id : 0 ,title : 1 ,author: 1 ,}} );
$match 用于過濾數(shù)據(jù)彤守,只輸出符合條件的文檔毯侦。$match使用MongoDB的標(biāo)準(zhǔn)查詢操作。 db.articles.aggregate( [{ $match : { score : { $gt : 70, $lte : 90 } } },{ $group: { _id: null, count: { $sum: 1 } } }] );
$limit 用來限制MongoDB聚合管道返回的文檔數(shù)具垫。
$skip 在聚合管道中跳過指定數(shù)量的文檔叫惊,并返回余下的文檔。 db.article.aggregate({ $skip : 5 });
$unwind 將文檔中的某一個數(shù)組類型字段拆分成多條做修,每條包含數(shù)組中的一個值霍狰。
$group 將集合中的文檔分組,可用于統(tǒng)計(jì)結(jié)果饰及。
$sort 將輸入文檔排序后輸出蔗坯。
$geoNear 輸出接近某一地理位置的有序文檔。

MongoDB 備份與恢復(fù)

MongoDB數(shù)據(jù)備份

mongodump - h dbhost -d dbname -o dbdirectory
  • -h
    MongoDB所在服務(wù)器地址燎含,需要指定端口號宾濒,例如默認(rèn)地址:127.0.0.1:27017
  • -d
    需要備份的數(shù)據(jù)庫實(shí)例,例如:test
  • -o
    備份的數(shù)據(jù)存放位置屏箍,該目錄需要提前建立绘梦,例如:d:\data\dump橘忱,當(dāng)備份完成后,系統(tǒng)自動在 dump 目錄下建立一個 test 目錄卸奉,在這個目錄里面存放該數(shù)據(jù)庫實(shí)例的備份數(shù)據(jù)钝诚。
  • mongodump 命令可選參數(shù)列表
語法 描述 實(shí)例
mongodump --host HOST_NAME --port PORT_NUMBER 該命令將備份所有MongoDB數(shù)據(jù) mongodump --host 127.0.0.1 --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY mongodump --dbpath /data/db/ --out /data/backup/
mongodump --collection COLLECTION --db DB_NAME 該命令將備份指定數(shù)據(jù)庫的集合。 mongodump --collection mycol --db test

MongoDB 數(shù)據(jù)恢復(fù)

>mongorestore -h dbhost -d dbname --directoryperdb dbdirectory
  • -h
    MongoDB所在服務(wù)器地址
  • -d
    需要恢復(fù)的數(shù)據(jù)庫實(shí)例榄棵,例如:test凝颇,當(dāng)然這個名稱也可以和備份時候的不一樣,比如 test2疹鳄。
  • --directoryperdb
    備份數(shù)據(jù)所在的位置拧略,例如:d:\data\dump\test,注意不是備份時的 d:\data\dump瘪弓。
  • --drop
    恢復(fù)的時候垫蛆,先刪除當(dāng)前數(shù)據(jù),然后恢復(fù)備份的數(shù)據(jù)腺怯。就是說袱饭,恢復(fù)后,備份后添加修改的數(shù)據(jù)都會被刪除瓢喉,需要慎用D唷Rㄍ浮栓票!

參考文檔一: MongoDB 文檔
參考文檔二: MongoDB W3C文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市愕够,隨后出現(xiàn)的幾起案子走贪,更是在濱河造成了極大的恐慌,老刑警劉巖惑芭,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坠狡,死亡現(xiàn)場離奇詭異,居然都是意外死亡遂跟,警方通過查閱死者的電腦和手機(jī)逃沿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幻锁,“玉大人凯亮,你說我怎么就攤上這事『宥” “怎么了假消?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長岭接。 經(jīng)常有香客問我富拗,道長臼予,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任啃沪,我火速辦了婚禮粘拾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谅阿。我一直安慰自己半哟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布签餐。 她就那樣靜靜地躺著寓涨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氯檐。 梳的紋絲不亂的頭發(fā)上戒良,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音冠摄,去河邊找鬼糯崎。 笑死,一個胖子當(dāng)著我的面吹牛河泳,可吹牛的內(nèi)容都是我干的沃呢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼拆挥,長吁一口氣:“原來是場噩夢啊……” “哼薄霜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纸兔,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惰瓜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后汉矿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崎坊,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年洲拇,在試婚紗的時候發(fā)現(xiàn)自己被綠了奈揍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡赋续,死狀恐怖男翰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚕捉,我是刑警寧澤奏篙,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響秘通,放射性物質(zhì)發(fā)生泄漏为严。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一肺稀、第九天 我趴在偏房一處隱蔽的房頂上張望第股。 院中可真熱鬧,春花似錦话原、人聲如沸夕吻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涉馅。三九已至,卻和暖如春黄虱,著一層夾襖步出監(jiān)牢的瞬間稚矿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工捻浦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晤揣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓朱灿,卻偏偏與公主長得像昧识,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盗扒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355