254_Mongodb_索引創(chuàng)建

      網(wǎng)友投稿 697 2025-04-01

      MongoDB 索引

      如果集合中存在許多文檔, 通常創(chuàng)建索引 來存儲文檔中的一個或多個特點字段進(jìn)行排序存儲, 這樣查詢效率會很高

      MongoDB中的索引類型

      索引類型

      描述

      舉例

      單字段索引

      在某一個特定的字段上建立索引 mongoDB在ID上建立了唯一的單鍵索引,所以經(jīng)常會使用id來進(jìn)行查詢; 在索引字段上進(jìn)行精確匹配、排序以及范圍查找都會使用此索引;

      db.users. createIndex({age:- 1});

      復(fù)合索引

      在多個特定的屬性上建立索引 復(fù)合索引鍵的排序順序,可以確定該索引是否可以支持排序操作; 在索引字段上進(jìn)行精確匹配、排序以及范圍查找都會使用此索引,但與索引的順序 有關(guān); 為了性能考慮,應(yīng)刪除存在與第一個鍵相同的單鍵索引

      db.users. createIndex({username:1,age: -1,country:1})

      多鍵索引

      在數(shù)組的屬性上建立索引 針對這個數(shù)組的任意值的查詢都會定位到這個文檔,既多個索引入口或者鍵值引用 同一個文檔

      db.users. createIndex({favorites.city: 1})

      空間索引

      2種平面幾何的2d索引,球面幾何的2dsphere索引 見后文詳解 文本索引 支持在集合中搜索字符串內(nèi)容

      db.reviews.createIndex( { co mments: "text" } )

      Hash索引

      不同于傳統(tǒng)的B-樹索引,哈希索引使用hash函數(shù)來創(chuàng)建索引 在索引字段上進(jìn)行精確匹配,但不支持范圍查詢,不支持多鍵hash; Hash索引上的入口是均勻分布的,在分片集合中非常有用;

      db.users. createIndex({username : 'hashed'})

      1 創(chuàng)建單字段索引

      語法 db.collection.createindex(,) keys: 設(shè)定索引的字段和排序規(guī)則, 排序規(guī)則 1 表升序, 若-1 表降序 options: background 創(chuàng)建索引是否在后臺進(jìn)行 默認(rèn)false unique 此索引是否為唯一索引, 默認(rèn)false (唯一索引) name: 索引名字 partialFilterExpression: 索引值用于篩選條件匹配的文檔 (部分索引) sparse: 索引只用于指定字段的文檔 (稀疏索引) expireAfterSeconds 此參數(shù)用于TTL索引中, 可以控制文檔報了在集合中的時間 storageEngine: 指定索引的存儲引擎

      唯一索引 db.collection.createIndex({id:1},{unique:true}) #默認(rèn)在_id 上創(chuàng)建唯一索引 部分索引 僅索引集合中符合指定過濾器表達(dá)式的文檔。較低的存儲需求,索引創(chuàng)建和維護(hù)的成本變小。 db.restaurants.createIndex({ cuisine: 1, name: 1 }, {partialFilterExpression:{ rating:{$gt: 5}}}) 稀疏索引 僅索引包含具有索引字段的文檔,哪怕索引字段包含空值 db.addresses.createIndex( { "xmpp_id": 1 }, { sparse: true } )

      TLL索引 (time-to-live) 特殊的單字段索引,針對時間類型的字段, 在一定時間后或在特定時間自動從集合中刪除文檔。對于日志和會話類的信息很有用。 db.eventlog.createIndex( {"lastModifiedDate":1}, {expireAfterSeconds:3600 }) db.eventlog.createIndex( {"lastModifiedDate":1}, {expireAfterSeconds: 60*60*24*7 }) #單位秒 s 特點 TTL索引不可以是復(fù)合索引 如果索引字段不是時間類型, 文檔不會刪除 TTL 每60s運行一次,移除過期文檔 如果時間類型字段已經(jīng)被定義為其它索引, 則無法通過TTL 索引來刪除此文檔 db.eventlog.drop(); db.eventlog.insert([ {system:"trade", lastModifiedDate:ISODate("2017-11-12T20:20:13Z"), context:"NullPointException, "}, {system:"goods", lastModifiedDate:ISODate("2017-11-15T20:21:13Z"), context:"NullPointException, "}, {system:"mongodb", lastModifiedDate:ISODate("2017-11-16T20:22:13Z"), context:"2019-11-12 18:18:52.426 [main] DEBUG org.mongodb.driver.connection - Closing connection connectionId{localValue:2, serverValue:2409}"} ]); // TLL 索引,創(chuàng)建索引的字段是日期或者是日期數(shù)組。不是這種類型的字段,是不會刪除文檔的, // 30秒后過期,會話、日志 db.eventlog.createIndex({"lastModifiedDate":1}, {expireAfterSeconds:30}); db.eventlog.find(); 不區(qū)分大小寫 #strength db.fruit.createIndex({ type: 1},{collation:{ locale:'en', strength:2 } } )

      全文本索引 用于查詢MongoDB中的文本文檔,可以包含一個或多個字段; 建立索引時需要將字段指定為 文本索引 “text”, 查詢搭配 $text操作符 特點 一個集合最多只能創(chuàng)建一個全文本索引,寫入速度會變慢 全文本索引可選擇所有字符串類型的字段, 可用全字段或者指定字段創(chuàng)建 可設(shè)置權(quán)重 全文本索引暫不支持中文索引 例 #部分字段 db.product.createindex({“productName”:”text”, “productStatus”: “text”}) #將product 集合中所有字符串的字段創(chuàng)建成全文本索引, 用”$**”代表文檔中所有字符串類型 db.product.createindex( {“$**” : “text”} ) # 創(chuàng)建文本索引搭配權(quán)重值 db.product.createindex( {“$**” : “text”} , {“weights”: {“ProductName” :10, “ProductMode”:5 } } ) # 使用$text 操作符 查詢含有 rose文檔 db.product.find({$text:{$search: “rose”}}).pretty()

      地理空間索引 兩類地理空間索引: 1) 2dsphere 2) 2d 2dsphere 支持查詢球體上位置,支持 GeoJSON 和傳統(tǒng)坐標(biāo)類型的數(shù)據(jù) GeoJSON數(shù)據(jù) 需要使用簽入文檔, 通過coordinate字段來指定坐標(biāo)位置, 通過type來指定坐標(biāo)類型, type分為如下三類 1 點 point 若type為point, coordinates 字段只有一個坐標(biāo) 2 線 lineString , 若type為lineString, coordinates 字段有兩個坐標(biāo) 3 多邊形 Polygon, 若type為Polygon 則coordinates 會有兩個以上坐標(biāo) // 球體空間 db.places.drop(); db.places.insert([ { loc:{ type:"Point", coordinates:[ -73.97, 40.77 ] }, name:"Central Park", category:"Parks" }, { loc:{ type:"Point", coordinates:[ -73.88, 40.78 ] }, name:"La Guardia Airport", category:"Airport" } ]); // 創(chuàng)建球體空間索引 db.places.createIndex( { loc:"2dsphere" } ) // 創(chuàng)建空間索引的復(fù)合索引 db.places.createIndex( { loc:"2dsphere" , category:-1, name:1 } ) // 聚合使用,距指定點最近到最遠(yuǎn)的順序輸出文檔 db.places.aggregate([ { $geoNear: { near: { type: "Point", coordinates: [ -73.99279 , 40.719296 ] }, distanceField: "dist.calculated", # 該參數(shù)用于計算只讀坐標(biāo)文檔與文檔中坐標(biāo)之間的距離 key: “l(fā)oc” # 指定 loc 字段上的2dsphere 索引 minDistance: 2, query: { category: "Parks" }, includeLocs: "dist.location", spherical: true } } ]) 傳統(tǒng)坐標(biāo)數(shù)據(jù): 只需要一個字段來指定坐標(biāo)位置 2d 此索引類型支持查詢二維平面位置,僅支持傳統(tǒng)坐標(biāo)類型的數(shù)據(jù) db.location.insert([ { _id:100, pos:{lng:126.9, lat:35.2}, co:[126.9, 35.2], type:"restaurant"}, { _id:200, pos:{lng:127.5, lat:36.1}, co:[127.5, 36.1], type:"restaurant"}, { _id:300, pos:{lng:128.0, lat:36.7}, co:[128.0, 36.7], type:"national park"} ]) // 創(chuàng)建2d索引 db.location.createIndex({co:"2d"}) db.places.aggregate([ { $geoNear: { near:[126,30] distanceField: "dist.location", key: “co” # 指定 co 字段上的2d索引 } } ]) // 查詢離目標(biāo)點(-70,30)距離最近的10個點 db.location.find({"co":{$near:[-70,30]}}).limit(10); // $within 參數(shù)可以代替$near來查找一個形狀之內(nèi)結(jié)果, // 必須指定該矩形的左下角和右上角坐標(biāo) // 還可以支持$box(矩形)和$center(圓環(huán))的范圍查詢 var box = [[10,10], [140,40]]; db.location.find({"co":{$within:{"$box":box}}}) // 創(chuàng)建geoHaystack索引 db.location.createIndex({pos:"geoHaystack", type:1} , {bucketSize:1}) // 查詢需要使用geoSearch關(guān)鍵字指定集合,查詢附近10米范圍的餐館 // Haystack索引不適合查詢最接近特定位置的文檔的完整列表。與存儲桶大小相比,最接近的文檔可能會更遠(yuǎn)。 // find方法無法使用geoHaystack索引,需要使用db.rumCommand方法 db.runCommand( {geoSearch:"location", search:{ type:"restaurant" } , near:[127, 36.8], maxDistance:1} ) // 首選通過find方法查詢,也可以通過db.runCommand方式查詢。 // 這種方式返回的結(jié)果中,包含距離目標(biāo)點的距離和一些利于排除故障的信息 db.runCommand({ geoSearch:"location", near:[126,30], maxDistance:16, search:{type:"restaurant"}, imit:10 });

      2 重建索引

      索引出現(xiàn)損壞,可以用reindex()方法重建索引, 本質(zhì)是將索引刪除后重建, 對于副本集來說,索引重建只會在當(dāng)前mongod進(jìn)行,不會同步給其它節(jié)點 不推薦使用 db.collection.reindex()

      3 查詢索引 getindexes()? & totalindexsize()

      254_Mongodb_索引創(chuàng)建

      查看索引 db.collection.getindexes() 查看集合中所有索引的大小 db.collection.totalindexSize()

      4 刪除索引 dropindex()

      # db.collection.dropindex 刪除指定索引名的索引 db.product.dropindex(“Weight_1”) # dropindex() 刪除除 “_id” 字段外的其它索引, 會鎖庫 db.collection.dropindexes() db.product.dropindexes()

      MongoDB

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:excel中mod函數(shù)的使用方法
      下一篇:word文檔在線預(yù)覽(在線預(yù)覽word excel
      相關(guān)文章
      久久精品国产亚洲AV无码娇色| 亚洲高清视频一视频二视频三| 久久亚洲精品成人av无码网站| 老牛精品亚洲成av人片| 亚洲国产成+人+综合| 亚洲视频在线不卡| 久久精品国产亚洲av日韩| 欧洲亚洲国产清在高| 亚洲欧洲自拍拍偷午夜色无码| 亚洲午夜久久久久久久久电影网 | 国产午夜亚洲精品| 国产精品亚洲四区在线观看| 亚洲va精品中文字幕| 亚洲一区二区三区精品视频| youjizz亚洲| 一本天堂ⅴ无码亚洲道久久| 亚洲性色精品一区二区在线| 亚洲日韩国产二区无码| 亚洲AV成人片无码网站| 国产午夜亚洲精品不卡电影| 亚洲国产成人五月综合网| 亚洲一区二区三区在线视频 | 亚洲精品无码99在线观看 | 国产亚洲精品拍拍拍拍拍| 在线亚洲人成电影网站色www| 亚洲中文字幕无码日韩| 亚洲国产精品一区二区第一页| 亚洲高清专区日韩精品| 久久精品国产亚洲AV电影| 亚洲国产视频一区| 亚洲欧洲精品成人久久曰| 最新亚洲人成无码网www电影| 亚洲国产高清精品线久久| 亚洲精品无码午夜福利中文字幕| 亚洲av午夜成人片精品网站| 久久精品国产亚洲av麻豆色欲| 亚洲另类视频在线观看| 亚洲欧洲国产综合AV无码久久| 亚洲精品和日本精品| 亚洲av综合avav中文| 亚洲午夜一区二区三区|