二 MongoDB的基本操作之索引

2021-09-02 23:12:00 字數 4149 閱讀 7694

(一)索引的種類

(二)查詢索引

1、查詢集合中所有索引

db.imooc_collection.getindexes()

(三)索引屬性

1、建立索引時的格式:db.collection.ensureindex(,),第2個引數便是對應的屬性。

2、比較重要的屬性:

(1)名字,name指定:

db.collection.ensureindex({},)

一旦我們自定義 name 之後,我們在刪除索引是,可將自定義 name 作為引數

db.collection.dropindex(「name」)

(2)唯一性,unique指定,利用unique可以實現若存在,則不插入,若不存在則插入。

db.collection.ensureindex({},)

(3)稀疏性,sparse指定,不必為不存在的字段建立索引(預設不稀疏)

db.collection.ensureindex({},)

#查詢存在 m 欄位的資料

①db.imooc_2.find(})

#建立 m 字段索引,且指定 稀疏性 true

②db.imooc_2.ensureindex(,)

#查詢非 m 欄位的資料

③db.imooc_2.find(m:)

如果mongodb在選取索引時,如果發現在稀疏索引上查詢不存在文件,將不會使用稀疏索引,如果強制指定的話,就會發現問題。

④db.imooc_2.getindexs()

⑤db.imooc_2.find(}).hint(「m_1」)

不能在稀疏索引上查詢欄位不存在的記錄。

(4)是否定時刪除,expireafterseconds指定:ttl,過期索引。

(四)建立索引

1、_id 索引

自動建立,無需手動建立

2、單鍵索引

db.imooc_collection.ensureindex()

(1)ensureindex建立索引,引數是json文件

(2)key的值不再代表值,而是代表方向: x:1代表正向排序,x:-1代表逆向排序。

(3)建立索引要消耗很長的時間,如果系統負載較重,且有很多已經存在的文件,則不能直接使用ensureindex這個命令,需要在資料庫建立之前就建立索引。

(4)建立索引會對寫入有一定的影響

3、多鍵索引

db.imooc_collection.insert()

解析:因為上面在建立單鍵索引時,就是在 x 上建立的,所以,當這裡插入的資料為陣列時,就自動變為了多鍵索引。

4、復合索引

插入資料

db.imooc_collection.insert()

建立復合索引

db.imooc_collection.ensureindex()

1代表正向排序 -1代表逆向排序

5、過期索引

建立過期索引

db.imooc_collection.ensureindex(,)

插入資料

db.imooc_collection.insert()

解析: 過期時間 10s

過期索引的限制:

1.儲存在過期索引欄位的值必須是指定的時間型別,必須是isodate或者isodate陣列,不能使用時間戳,否則不能自動刪除。

例如 >db.imooc_collection.insert(),這種是不能被自動刪除的

2.如果指定了isodate陣列,則按照最小的時間進行刪除。

3.過期索引不能是復合索引。因為不能指定兩個過期時間。

4.刪除時間是不精確的。刪除過程是由mongodb的後台程序每60s跑一次的,而且刪除也需要一定時間,所以存在誤差。

6、全文索引

(1)建立全文索引

1、db.imooc_collection.ensuerindex()

為key欄位建全文索引,text為引數。

2、db.imooc_collection.ensuerindex()

為key_1,key_2欄位建全文索引,text為引數。

3、db.imooc_collection.ensuerindex()

不指定字段,建立集合下所有資訊的全文索引。

(2)使用全文索引查詢

注意:乙個集合只能建立乙個全文索引

#查詢包含aa的內容的文件

db.imooc_collection.find(})

#(或查詢)查詢包含aa或bb或cc的內容的文件

db.imooc_collection.find(})

#(\ 與查詢)查詢包含aa、bb和cc的內容的文件

db.imooc_collection.find(})

# -為排除包含有cc內容的文件

db.imooc_collection.find(})

(3)使用全文索引帶權重查詢

引數},用於標識相似度。

#引數},用於標識相似度。

db.imooc_collection.find(},})

#按相似度排序

db.imooc_2.find(},}).sort(})

(4)缺陷

全域性索引的限制:

每次查詢,只能指定乙個$text查詢

$text查詢不能出現在$nor查詢中

查詢中如果包含了$text,hint不再起作用

7、地理位置索引

(1)2d索引

db.collection.ensureindex()

位置表示方式:經緯度【經度,維度】

取值範圍:經度【-180,180】緯度【-90,90】

例如:db.collection.insert()

查詢方式:

1、$near查詢:查詢距離某個點最近的點,預設返回100個最近的點

#查詢距離點 [1,1] 最近的點

db.collection.find(})

#查詢距離點 [1,1] 最近的點,且距離不超過10

db.collection.find(})

2、$geowithin查詢:查詢某個形狀內的點

形狀的表示

a、$box:矩形,使用

//第乙個座標代表左邊界,第二個右邊界

案例:db.location.find(}})

b、$center:圓形

//r為圓的半徑

案例:db.location.find(}})

c、$polygon:多邊形

案例:db.location.find(}})

3、geonear 查詢(可以看做是$near查詢的進化版本)

它不僅支援 mindistance,而且它的返回結果多了一些資料。

使用runcommand命令進行使用:

db.runcommand()

4、查詢返回結果

//查詢到的資料}],

"stats":,

"ok":

}

(2)2dsphere 索引

建立方法:db.collection.ensureindex()

2dsphere位置表示方式:

geojson:描述乙個點,一條直線,多邊形等形狀。

格式:geojson查詢可支援多邊形交叉點等,支援maxdistance 和 mindistance

(五)索引構建情況分析

2、判斷當前索引構建的情況:

3、mongostat工具

使用 mongostat 工具:./mongostat -h 127.0.0.1:27017

4、profile集合

MongoDB學習之基本操作

資料庫 database 集合 collection 文件 document 在mongodb中,資料庫和集合都不需要建立,資料庫和集合會在第一次插入文件時建立.顯示所有資料庫 show dbs進入到指定的資料庫中 use 資料庫名顯示當前資料庫所有集合 show collections向指定集合插...

mongodb之(6)mongodb集合與索引

mongodb 中使用 createcollection 方法來建立集合。語法格式 db.createcollection name,options 引數說明 options引數 字段 型別描述 bool 可選 如果為 true,則建立固定集合。固定集合是指有著固定大小的集合,當達到最大值時,它會自...

MongoDB 學習二(shell 基本操作)

使用昨天學過的命令 mongod dbpath users pro documents mongodb data db 來啟動服務 先切換到bin目錄下 然後使用命令 mongo 來啟動資料庫 這裡預設啟動的也是27017的埠,如果想更換埠可以使用 mongo port 8888 前提是前面啟動mo...