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文檔