婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MongoDB通配符索引的用法實例

MongoDB通配符索引的用法實例

熱門標簽:呼和浩特外呼系統原理是什么 外呼線路資源屬于電信業務嗎 長沙電銷外呼防封卡是什么 內蒙古營銷智能外呼系統哪個好 青白江400企業電話申請 小裙科技電銷機器人怎樣 智能外呼系統官網 河南電話外呼系統招商 crm外呼系統聯系方式

指南

MongoDB在4.2 版本推出了Wildcard Indexes,究竟什么是Wildcard Indexes以及Wildcard Indexes適合哪些場景本文結合官方文檔以及實際測試進行簡單概述。

1、通配符索引示例

因為MongoDB是dynamic schemas,所以應用是可以查詢任何已知字段或者隨機字段的。

假設(此假設案例摘自官方文檔),集合colA的UserMetadata字段包含如下數據:

{ "userMetadata" : { "likes" : [ "dogs", "cats" ] } }
{ "userMetadata" : { "dislikes" : "pickles" } }
{ "userMetadata" : { "age" : 45 } }
{ "userMetadata" : "inactive" }

但是在查詢的時候可能是如下語句:

db.colA.find({ "userMeta2
通配符索引的形式data.likes" : "dogs" })
db.colA.find({ "userMetadata.dislikes" : "pickles" })
db.colA.find({ "userMetadata.age" : { $gt : 30 } })
db.colA.find({ "userMetadata" : "inactive" })

是否能通過一個索引來完成上述需求?

答案是肯定的,上述查詢可以通過通配符索引來實現既定需求,也就是 db.colA.createIndex( { "userMetadata.$**" : 1 } )。

那么如何創建通配符索引?

注意:首先應該明確的是通配符索引只在版本兼容性4.2的時候才能創建。

如何查詢版本兼容性?

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

如何設置?

db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )

2、通配符索引的形式

單字段通配符索引

{
 "_id" : ObjectId("5ee2df16911d8dfaa91520b4"),
 "product_name" : "Spy Coat",
 "product_attributes" : {
 "material" : [
 "Tweed",
 "Wool",
 "Leather"
 ],
 "size" : {
 "length" : 72,
 "units" : "inches"
 }
 }
}
{
 "_id" : ObjectId("5ee2df30911d8dfaa91520b5"),
 "product_name" : "Spy Pen",
 "product_attributes" : {
 "colors" : [
 "Blue",
 "Black"
 ],
 "secret_feature" : {
 "name" : "laser",
 "power" : "1000",
 "units" : "watts"
 }
 }
}

如果數據結構是上面這樣的,其中product_attributes 屬性包含任何的結構。

那么如果我們創建一個這個索引,它會進行什么操作?

db.product_catalog.createIndex({"product_attributes.$**":1})。

因為product_attributes 里面包含數組和嵌套文檔等對象,實際創建這個索引后,會迭代嵌套文檔或者數組把里面的所有的值都取出來放到索引里。支持如下查詢:

db.product_catalog.find({"product_attributes.colors":"Blue"})
db.product_catalog.find({"product_attributes.secret_feature.name":"laser"})
db.product_catalog.find({"product_attributes.size.length":{$gt:60}})

全字段的通配符索引

可以通過下面的語句創建一個索引,索引中包含集合中的所有字段,但是不包括_id(如果想包含_id可以通過wildcardProjection 來設置),如果集合中的字段包含數組或者嵌套對象的話,那么會迭代數組或者嵌套對象并把值放到索引中。

Db.product_catalog.createIndex({“$**”:1}) 

給每個文檔添加一個address的字段。

7777:PRIMARY> db.product_catalog.find().pretty()
{
 "_id" : ObjectId("5ee2df16911d8dfaa91520b4"),
 "product_name" : "Spy Coat",
 "product_attributes" : {
 "material" : [
 "Tweed",
 "Wool",
 "Leather"
 ],
 "size" : {
 "length" : 72,
 "units" : "inches"
 }
 },
 "address" : "Beijing"
}
{
 "_id" : ObjectId("5ee2df30911d8dfaa91520b5"),
 "product_name" : "Spy Pen",
 "product_attributes" : {
 "colors" : [
 "Blue",
 "Black"
 ],
 "secret_feature" : {
 "name" : "laser",
 "power" : "1000",
 "units" : "watts"
 }
 },
 "address" : "Tianjin"
}

db.product_catalog.find({"product_name":"Spy Coat","address":"nanji","product_attributes.colors":"Blue"})

在全字段通配符索引的基礎上可以明確包含哪些或者不包含哪些字段到通配符索引中,只能是在全字段通配符索引的基礎上,單字段的是不可以的:

在全字段的基礎上創建一個明確包含哪些字段的索引:

db.collection.createIndex(
 { "$**" : 1 },
 { "wildcardProjection" :
 { "fieldA" : 1, "fieldB.fieldC" : 1 }
 }
)

注意:通配符索引不支持在使用wildcardProjection的時候混合使用包含和排除語句,除了明確指定包含_id字段的時候。

在全字段的基礎上創建一個明確不包含哪些字段的索引:

db.collection.createIndex(
 { "$**" : 1 },
 { "wildcardProjection" :
 { "fieldA" : 0, "fieldB.fieldC" : 0 }
 }
)

3、通配符索引的行為

通配符索引的行為根據其字段類型不同而有所不同。

  • 字段為對象
    如果是對象的話,會將對象中的內容存儲到索引中,通配符索引會把對象中的所有嵌套對象加載到索引中。
  • 字段為數組
    如果是數組的話,通配符索引遍歷數組并且將每個元素都存儲到索引中。
    如果數組中的元素是一個對象的話,通配符索引把對象中的內容加載到索引中,像上面的加載對象一樣。
    如果數組中的元素是一個數組的話(就是多維數組),通配符索引并不迭代嵌套數組,相反是把整個嵌套數組作為一個值來看。
  • 其他類型
    把值記錄到數組中。
    通配符索引會持續迭代任何的嵌套對象或者數組直到最底層(就是不能在迭代為止),然后它會索引全路徑。

通配符索引對于顯示數組位置的查詢

通配符索引雖然不會記錄給定數組中的元素下標,但是,MongoDB仍然可以選擇通配符索引來滿足包含一個或多個顯式數組索引的字段路徑的查詢(for example, parentArray.0.nestedArray.0)

由于為每個連續嵌套數組定義索引邊界的復雜性日益增加,如果該路徑包含8個以上的顯式數組索引,MongoDB不會考慮使用通配符索引來回答查詢中的給定字段路徑。MongoDB仍然可以考慮使用通配符索引來回答查詢中的其他字段路徑。

如果超過了8個以上顯示數組索引的話MongoDB 會考慮另外的索引或者執行全集合掃描。如下結構:

{
 "parentObject" : {
 "nestedArray" : [
 "elementOne",
 {
  "deeplyNestedArray" : [ "elementTwo" ]
 }
 ]
 }
}

請注意,通配符索引本身對索引文檔時遍歷文檔的深度沒有任何限制;該限制僅適用于顯式指定精確數組索引的查詢。通過發出沒有顯式數組索引的相同查詢,MongoDB可以選擇通配符索引來回答查詢。

4、通配符索引的限制

1.首先通配符索引是一個稀疏索引,只存放存在的字段在索引里面,不存在的不存放,也就是說當你使用{$exists:false}的時候,是不會走索引的,是全集合掃描。

db.test_new_wildidx.find({"block.attr":{$exists:false}})

db.test_new_wildidx.find({"block.attr":{$exists:true}})  但是支持true的。

2.通配符索引不支持直接等于/不等于一個對象或者數組。

通配符索引會將對象或者數組中的元素加載到索引中,而不是整體放到索引中。故通配符索引不支持直接用文檔或者數組來匹配。

所以上面的例子如果

7777:PRIMARY> db.test_new_wildidx.find({"block.attr.address_new": ["haicheng", "beijing", "chongqing"]})

就是想匹配整個數組的話,是不可能用到通配符索引的。

那么如果有這個需求該如何解決?Db.test_new_wildidx.createIndex({"block.attr.address_new":1}) 通過這個索引來解決。

雖然通配符索引不支持整個文檔或者對象直接精準匹配查詢,但是支持數組或者對象為空{} 這種操作:

7777:PRIMARY> db.test_new_wildidx.find({"block.attr": {}})
7777:PRIMARY> db.test_new_wildidx.find({"block.attr.address_new": {}})

3. 通配符索引支持如下索引類型或者或者屬性:

Compound
TTL
Text
2d (Geospatial)
2dsphere (Geospatial)
Hashed
Unique

4.通配符索引不支持文檔中的數組$ne null這種。其實不光是數組,別的字段也同樣,只要是$ne都不會使用通配符索引。

5、總結

通配符索引在一定程度上可以應對在建模初期對于索引建立疏忽的遺漏,但是如果一味依賴通配符索引來解決查詢中的各種精確字段的匹配那就是鄭人買履了,在實際測試中通配符索引和精確字段的索引相比隨著數據的增長效率逐漸下滑。這也是官方不是很建議使用通配符索引來替代常規索引的原因。

到此這篇關于MongoDB通配符索引的文章就介紹到這了,更多相關MongoDB通配符索引內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MongoDB索引使用詳解
  • MongoDB的基礎查詢和索引操作方法總結
  • MongoDB中唯一索引(Unique)的那些事
  • MongoDB中創建索引需要注意的事項
  • mongodb處理中文索引與查找字符串詳解
  • 深入理解MongoDB的復合索引
  • Mongodb索引的優化

標簽:舟山 楚雄 安順 池州 菏澤 呼倫貝爾 黃石 白山

巨人網絡通訊聲明:本文標題《MongoDB通配符索引的用法實例》,本文關鍵詞  MongoDB,通配符,索引,的,用法,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MongoDB通配符索引的用法實例》相關的同類信息!
  • 本頁收集關于MongoDB通配符索引的用法實例的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲成人精品在线观看| 国产午夜精品久久久久久久 | 欧美精彩视频一区二区三区| 欧美三级在线看| 日本电影亚洲天堂一区| 在线一区二区视频| 5月丁香婷婷综合| 色综合久久久久综合体| 在线这里只有精品| 91极品美女在线| 555www色欧美视频| 精品久久一区二区| 中文字幕成人在线观看| 亚洲欧美色综合| 亚洲一区二区三区精品在线| 日韩精品色哟哟| 国产精品亚洲成人| 91美女在线看| 欧美久久久久中文字幕| 亚洲精品在线网站| 中文乱码免费一区二区| 一区二区三区不卡视频| 午夜精品在线看| 国产剧情av麻豆香蕉精品| 99久久综合狠狠综合久久| 欧美日本乱大交xxxxx| 久久久99精品久久| 亚洲成av人片一区二区梦乃| 国产麻豆9l精品三级站| 99久久精品免费| 欧美一级高清片| 日韩美女啊v在线免费观看| 天天射综合影视| 丰满岳乱妇一区二区三区| 欧美日韩中文精品| 国产欧美一区二区三区网站| 视频一区二区中文字幕| 丰满少妇久久久久久久| 91精品国产欧美日韩| 国产精品免费aⅴ片在线观看| 日韩av成人高清| 成人免费av网站| 精品少妇一区二区三区在线播放 | 日本成人在线网站| 99视频精品免费视频| 精品国产91久久久久久久妲己| 一区二区三区不卡在线观看| 成人理论电影网| 久久网站热最新地址| 五月天亚洲婷婷| 99re这里只有精品6| 久久久精品免费观看| 欧美aaaaaa午夜精品| 欧美无砖砖区免费| 一区二区三区久久久| 99久久精品免费精品国产| 国产亚洲精品精华液| 国产呦萝稀缺另类资源| 欧美一区二区三区系列电影| 亚洲一区二区偷拍精品| 91久久精品一区二区| 亚洲三级久久久| 色综合视频在线观看| 亚洲激情男女视频| 99久久精品国产精品久久| 久久精品欧美日韩| 国内精品久久久久影院色 | 久久精品视频在线看| 另类的小说在线视频另类成人小视频在线 | 7777精品久久久大香线蕉| 亚洲色图欧美激情| 色婷婷国产精品| 亚洲一区电影777| 在线不卡欧美精品一区二区三区| 一区2区3区在线看| 欧美日韩在线精品一区二区三区激情| 亚洲男女一区二区三区| 91亚洲国产成人精品一区二区三 | 在线亚洲高清视频| 亚洲制服丝袜一区| 7777精品伊人久久久大香线蕉的 | 在线一区二区三区四区五区 | 国产精品欧美久久久久一区二区 | 欧美一区二区三区在| 麻豆国产精品一区二区三区| 久久综合久色欧美综合狠狠| 国产电影精品久久禁18| 亚洲欧美日韩在线| 91麻豆精品国产91| 国产成人在线电影| 亚洲一区二区三区不卡国产欧美| 欧美精品黑人性xxxx| 国产精品小仙女| ...av二区三区久久精品| 欧美吞精做爰啪啪高潮| 另类综合日韩欧美亚洲| 中文字幕中文字幕在线一区| 欧美日韩免费电影| 激情综合色丁香一区二区| 中文字幕日韩av资源站| 91麻豆精品国产91久久久久| 从欧美一区二区三区| 亚洲一区二区在线观看视频 | 亚洲欧美区自拍先锋| 717成人午夜免费福利电影| 国产乱人伦偷精品视频不卡 | 亚洲午夜免费电影| 精品乱人伦小说| 色婷婷综合在线| 国产成人精品免费网站| 亚洲午夜电影网| 国产精品短视频| 久久影院午夜论| 欧美日韩国产免费| av一区二区三区黑人| 日韩av电影天堂| 一区二区在线免费观看| 欧美精品一区二区三区蜜桃| 欧美制服丝袜第一页| 国产激情一区二区三区| 欧美a一区二区| 亚洲第四色夜色| 亚洲精品欧美激情| 国产精品久久久爽爽爽麻豆色哟哟| 欧美成人免费网站| 欧美精品日韩精品| 欧美视频一区二区| 色狠狠桃花综合| 成人免费看黄yyy456| 国产精选一区二区三区| 久久国产精品露脸对白| 日韩不卡一二三区| 无码av免费一区二区三区试看| 国产精品久久免费看| 欧美国产成人精品| 久久精品男人天堂av| 久久亚洲综合色一区二区三区| 在线播放国产精品二区一二区四区| 色猫猫国产区一区二在线视频| 成人av电影在线网| 国产69精品久久777的优势| 国产经典欧美精品| 成人免费视频一区二区| 成人a免费在线看| av在线播放成人| 日本韩国精品一区二区在线观看| 91一区二区三区在线观看| aaa欧美日韩| 色婷婷亚洲婷婷| 欧美唯美清纯偷拍| 91精品久久久久久久91蜜桃| 欧美一区二区二区| 欧美tickling网站挠脚心| 精品va天堂亚洲国产| 欧美白人最猛性xxxxx69交| 欧美大白屁股肥臀xxxxxx| www国产亚洲精品久久麻豆| 久久看人人爽人人| 国产精品网站导航| 一区二区三区色| 蜜桃一区二区三区四区| 国产精品亚洲人在线观看| 成人免费毛片a| 欧美日韩在线亚洲一区蜜芽| 欧美一级xxx| 国产精品久久午夜| 性久久久久久久久久久久| 老司机午夜精品99久久| 成人夜色视频网站在线观看| 91福利社在线观看| 精品蜜桃在线看| 亚洲免费观看高清在线观看| 热久久久久久久| 成人免费看视频| 7878成人国产在线观看| 国产欧美一区二区在线| 亚洲国产精品精华液网站| 久久99国产精品麻豆| 91香蕉视频污| 欧美一区二区在线看| 中文字幕 久热精品 视频在线| 亚洲亚洲精品在线观看| 国产一区在线看| 欧美日韩激情一区二区三区| 国产午夜精品久久久久久久 | 日韩你懂的在线播放| 国产成人av一区二区三区在线| 亚洲一卡二卡三卡四卡五卡| 精品捆绑美女sm三区| 男人的天堂亚洲一区| 国内精品不卡在线| 日本一区二区三区四区在线视频| 亚洲电影第三页| 北岛玲一区二区三区四区| 国产精品天美传媒沈樵| 成人一区二区三区视频| 自拍偷拍亚洲激情| 欧美性淫爽ww久久久久无| 无码av免费一区二区三区试看 | 亚洲国产精品国自产拍av|