亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MongoDB > 正文

MongoDB通配符索引如何用?

2024-09-07 00:22:36
字體:
來源:轉載
供稿:網友
       這篇文章給大家介紹的是關于MongoDB通配符索引的用法內容,小編認為是比較實用,因此分享給大家作參考,有這方面學習需要的朋友可以看看。
 
       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" })
        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 屬性包含任何的結構。
 
        全字段的通配符索引
 
       可以通過下面的語句創建一個索引,索引中包含集合中的所有字段,但是不包括_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、通配符索引的行為
 
       通配符索引的行為根據其字段類型不同而有所不同。
 
字段為對象
如果是對象的話,會將對象中的內容存儲到索引中,通配符索引會把對象中的所有嵌套對象加載到索引中。
字段為數組
如果是數組的話,通配符索引遍歷數組并且將每個元素都存儲到索引中。
如果數組中的元素是一個對象的話,通配符索引把對象中的內容加載到索引中,像上面的加載對象一樣。
如果數組中的元素是一個數組的話(就是多維數組),通配符索引并不迭代嵌套數組,相反是把整個嵌套數組作為一個值來看。
其他類型
把值記錄到數組中。
通配符索引會持續迭代任何的嵌套對象或者數組直到最底層(就是不能在迭代為止),然后它會索引全路徑。
 
       如果超過了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.通配符索引不支持直接等于/不等于一個對象或者數組。
 
       通配符索引會將對象或者數組中的元素加載到索引中,而不是整體放到索引中。故通配符索引不支持直接用文檔或者數組來匹配。
 
        3. 通配符索引支持如下索引類型或者或者屬性:
 
Compound
TTL
Text
2d (Geospatial)
2dsphere (Geospatial)
Hashed
Unique
 
       4.通配符索引不支持文檔中的數組$ne null這種。其實不光是數組,別的字段也同樣,只要是$ne都不會使用通配符索引。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美极品少妇xxxxⅹ免费视频| 九九视频这里只有精品| 欧美精品videossex88| 日韩欧美主播在线| 国产亚洲精品久久久| 久久久久久美女| 欧美成人sm免费视频| 日韩免费av片在线观看| 久久精品久久久久久| 色琪琪综合男人的天堂aⅴ视频| 亚洲国产精品va在线| 国产精品你懂得| 久久久久久久国产| 日本成人免费在线| 欧美性xxxx18| 欧美裸体视频网站| 国产亚洲精品一区二区| 日韩av片永久免费网站| 亚洲色图13p| 日韩欧美在线视频观看| 亚洲精品在线91| 色偷偷888欧美精品久久久| 亚洲精品综合久久中文字幕| 欧美情侣性视频| 久久人人爽人人爽人人片av高请| 欧美日韩免费在线| 亚洲欧美精品中文字幕在线| 国产精品视频xxxx| 久久久久久久久久久av| 亚洲第一黄色网| 国产精品成人观看视频国产奇米| 日韩美女主播视频| 欧美成人免费网| 国产成人综合亚洲| 亚洲国产日韩欧美在线99| 亚洲aⅴ男人的天堂在线观看| 久久伊人精品视频| 国产在线日韩在线| 影音先锋欧美精品| 国产z一区二区三区| 久久福利视频网| 欧美精品videossex性护士| 亚洲一区美女视频在线观看免费| 久久精品成人欧美大片| 136fldh精品导航福利| 国产日本欧美一区二区三区在线| 姬川优奈aav一区二区| 久久国产精品免费视频| 疯狂欧美牲乱大交777| 国产一区二区在线免费| 日韩av最新在线| 久久免费精品视频| 538国产精品一区二区在线| 亚洲国内精品视频| 狠狠躁18三区二区一区| 亚洲国产91精品在线观看| 亚洲一区二区久久| 欧美电影在线播放| 成人性生交大片免费看小说| 亚洲精品色婷婷福利天堂| 国产日韩精品在线播放| 中文字幕亚洲专区| 久久男人资源视频| 久久99久久99精品免观看粉嫩| 亚洲欧美日韩精品久久奇米色影视| 亚洲片在线资源| 国产乱肥老妇国产一区二| 一区二区日韩精品| 亚洲精品久久久久| 色小说视频一区| 欧美视频裸体精品| 日韩国产欧美精品在线| 国产极品精品在线观看| 亚洲成人中文字幕| 91国内在线视频| 久久精品视频免费播放| 亚洲欧美激情在线视频| 91tv亚洲精品香蕉国产一区7ujn| 国产欧美在线观看| 91精品国产综合久久香蕉| 5252色成人免费视频| 亚洲美女av网站| 欧美高清视频免费观看| xvideos亚洲人网站| 66m—66摸成人免费视频| 国产精品无码专区在线观看| 日韩成人小视频| 欧美激情视频网址| 国产精品丝袜高跟| 国产精品自产拍高潮在线观看| 国模精品系列视频| 中文字幕欧美日韩精品| 国内精品视频在线| 国产性猛交xxxx免费看久久| 亚洲国产精品999| 久久久久久国产精品美女| 亚洲色图综合久久| 国产日韩欧美日韩| 久久91精品国产91久久跳| 欧美日韩国产丝袜另类| 91av视频在线| 91九色国产社区在线观看| 欧美一区二区三区艳史| 在线中文字幕日韩| 欧美一级淫片videoshd| 91在线直播亚洲| 91亚洲va在线va天堂va国| 精品magnet| 91欧美精品午夜性色福利在线| 日韩欧美aaa| 激情久久av一区av二区av三区| 欧美亚洲视频一区二区| 在线观看国产欧美| 欧美激情中文字幕乱码免费| 性欧美xxxx| 精品一区二区三区三区| 欧美成aaa人片免费看| 黄网动漫久久久| 成人免费淫片aa视频免费| 欧美性生交xxxxx久久久| 欧美激情亚洲国产| 国产精品69精品一区二区三区| 中文字幕日韩在线观看| 2018中文字幕一区二区三区| 国产精品视频最多的网站| 中文字幕日韩电影| 欧美极品少妇与黑人| 亚洲天堂2020| 国产美女久久久| 亚洲视频欧洲视频| 亚洲综合一区二区不卡| 国产精品永久免费观看| 亚洲欧美中文在线视频| 国产精品网址在线| 第一福利永久视频精品| 亚洲欧美国产视频| 亚洲电影免费观看高清完整版在线| 亚洲精品一区中文字幕乱码| 日韩小视频在线观看| 亚洲在线免费看| 久久精品青青大伊人av| 欧美日韩成人在线播放| 亚洲综合精品一区二区| 国产精品视频在线观看| 成人羞羞国产免费| 欧美性受xxxx白人性爽| 97精品在线视频| 亚洲激情免费观看| 亚洲国产精品免费| 另类视频在线观看| 国产精品成人观看视频国产奇米| 欧美黄色片在线观看| 精品久久久久久久久久国产| 狠狠久久亚洲欧美专区| 欧美黄色免费网站| 欧美巨大黑人极品精男| 国产一区二区日韩精品欧美精品| 欧美激情第1页| 亚洲在线免费看| 久久视频国产精品免费视频在线| 奇米一区二区三区四区久久| 欧美猛男性生活免费| 亚洲视频第一页| 日韩美女在线看|