天天看點

Mongodb 學習筆記5:索引

索引是用來加速查詢的。

建立索引:

>db.person.ensureIndex({"name":1})  ------1表示升序,-1表示降序

一般一定要建立查詢中用到的所有鍵的索引,索引才會在查詢啟作用。

>db.person.find({"date":date1}).sort({"date":1,"name":1})       

上述查詢必須進行表掃描,需要進行以下操作:

>db.person.ensureIndex({“date”:1,"name":1}) 

組合索引鍵的排列不同,建立的索引不同。

預設下索引名為:keyname1_dir1_keyname2_dir2_keyname3_dir3……這種形式,dir代表索引的方向1或者-1.可以給索引命名:

>db.person.ensureIndex({“date”:1,"name":1},{"name":"date_name")

explain()傳回查詢使用的索引情況,耗時及掃描文檔數的統計資訊。 

索引建立是要花費很多時間的,可以使用{"background”:true}選項是建立過程在背景運作。

下圖顯示了索引建立前後的性能對比:

Mongodb 學習筆記5:索引

   cursor:       mongodb采用B樹的結構來存放索引,索引名為後面的“name_1"。

   nscanned:  代表查找了多少個文檔。

   n:             傳回文檔的數量

   millis:       執行所需的時間

建立唯一索引

>db.person.ensureIndex({“date”:1,"name":1},{"unique":"true"})

insert不檢查文檔是否插入過了。

當為已有集合建立索引,有些文檔值已經重複了,則使用dropDups選項,保留第一個文檔。

>db.person.ensureIndex({“date”:1,"name":1},{"unique":"true","dropDups":true})

唯一複合索引:單個鍵值可以相同,但所有鍵值組合不同。

删除索引:dropIndexes

Mongodb 學習筆記5:索引

地理空間索引:找到離目前位置最近的N個場所,為坐标平面查詢建立索引

gps"鍵的值是一個包含兩個元素的數組或者兩個鍵的内嵌文檔,鍵名可以任意。預設情況下值的範圍:-180~180。可以指定最大最小值。

>db.map.ensureIndex({"gps":"2d"})      

>db.map.ensureIndex({"gps":"2d"},{"min":-1000,"max":1000}   

"{"gps":[0,100]}

{"gps":{”x":-30,"y":30})

{"gps":{"latitude":-180,"longitude":180}}

地理空間查詢

find():"$near":兩個目标值數組作為參數。

>db.map.find({"gps":{"$near":[40,-73]}})

按照離點(40,-73)由近及遠的方式将map集合的所有文檔都傳回。預設傳回100個文檔。

>db.map.find({"gps":{"$near":[40,-73]}}).limit(10)

以下操作同樣完成上述功能,還傳回每個文檔到查詢點的距離。

>db.runCommand({geoNear:"map",near:[40,-73],num:10});

還可以找指定形狀内的文檔:

>db.map.find({"gps":{"$within":{”$box":[[10,20],[15,30]]}}})

"$box":第一個參數指定左下角的坐标,第二個參數指定右上角的坐标

"$center":指定圓心和半徑:

>db.map.find({"gps":{"$within":{”$center":[[12,25],5]}}})

符合地理空間索引

>db.map.ensureIndex({"gps":"2d","desc":1})    

查找最近的咖啡館:

>db.map.find({"gps":{"$near":[40,-73]},"desc":"coffeeshop"}).limit(1)

轉載于:https://www.cnblogs.com/lucyawei/archive/2013/04/28/3048967.html