欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mongodb文檔和數(shù)組的通配符索引應(yīng)用小結(jié)

 更新時(shí)間:2024年07月26日 10:46:06   作者:威贊  
Mongodb的通配符索引,為靈活可變的Mongodb數(shù)據(jù)結(jié)構(gòu)提供了高效的查詢(xún)方法,本文結(jié)合Mongodb官方文檔,詳細(xì)介紹在嵌入式文檔和數(shù)組上,通配符索引的結(jié)構(gòu),感興趣的朋友一起看看吧

學(xué)習(xí)mongodb,體會(huì)mongodb的每一個(gè)使用細(xì)節(jié),歡迎閱讀威贊的文章。這是威贊發(fā)布的第97篇mongodb技術(shù)文章,歡迎瀏覽本專(zhuān)欄威贊發(fā)布的其他文章。如果您認(rèn)為我的文章對(duì)您有幫助或者解決您的問(wèn)題,歡迎在文章下面點(diǎn)個(gè)贊,或者關(guān)注威贊。謝謝。威贊文章都是結(jié)合官方文檔,翻譯整理而來(lái),并對(duì)每個(gè)知識(shí)點(diǎn)的描述都認(rèn)真思考和實(shí)踐,對(duì)難以理解的地方,使用簡(jiǎn)單容易理解的方式進(jìn)行闡述。

概述

Mongodb的通配符索引,為靈活可變的Mongodb數(shù)據(jù)結(jié)構(gòu)提供了高效的查詢(xún)方法。本文結(jié)合Mongodb官方文檔,詳細(xì)介紹在嵌入式文檔和數(shù)組上,通配符索引的結(jié)構(gòu)。

Mongodb為嵌入式文檔和數(shù)組字段建立通配符索引時(shí),有特殊的邏輯:

  • 當(dāng)為文檔對(duì)象建立通配符索引時(shí),Mongodb會(huì)掃描文檔對(duì)象的每一個(gè)字段,將文檔的每一個(gè)字段都加入到該通配符索引中。如果該字段值也是文檔對(duì)象,則繼續(xù)向下掃描,將該文檔類(lèi)型的字段添加到通配符索引。當(dāng)為數(shù)組對(duì)象建立通配符索引時(shí), Mongodb會(huì)掃描數(shù)組中的每一個(gè)元素,將每一個(gè)元素的內(nèi)容添加到通配符索引。如果該元素是個(gè)數(shù)組,則將數(shù)組整體放入的通配符索引中。
  • 當(dāng)數(shù)組元素是對(duì)象時(shí),則按照添加對(duì)象的方式,將該對(duì)象的每一個(gè)字段添加到通配符索引。
  • 對(duì)于其他類(lèi)型的字段,通配符索引保存基本的數(shù)據(jù)類(lèi)型值。即非對(duì)象,非數(shù)組類(lèi)型值。

通配符索引會(huì)持續(xù)轉(zhuǎn)換構(gòu)建索引時(shí)遇到的嵌套文檔或數(shù)組,直到遇到基本數(shù)值為止。Mongodb將基本數(shù)值和該字段的路徑,都放入到通配符索引當(dāng)中。

應(yīng)用

為文檔對(duì)象建立通配符索引

構(gòu)建集合users并插入數(shù)據(jù)

db.users.insertOne({
    account: {
        user_name: "SuperAdmin01",
        contact: {
            email: "xyz@example.com",
            phone: "1234567890"
        },
        access: {
            group: "admin"
        }
    }
})

在account字段添加通配符索引

db.users.createIndex({"account.$**": 1})

Mongodb在構(gòu)建通配符索引時(shí),會(huì)解析account對(duì)象的每一個(gè)字段 ,將每一個(gè)字段的值和路徑放到索引中

  • "account.username": "SuperAdmin01"
  • "account.contact.email": "xyz@example.com"
  • "account.contact.phone": "1234567890"
  • "access.group": "admin"

為數(shù)組對(duì)象添加通配符索引

創(chuàng)建fleet集合并添加數(shù)據(jù)

db.fleet.insertOne({
    ship: {
        coordinates: [
            [ 37.786971, -122.399677 ],
            [ 37.786971, -122.399677 ]
        ],
        type: "Cargo Ship",
        captains: [
            {
                name: "John Doe",
                age: 45,
                crew: [ "first mate", "engineer" ]
            }
        ]
    }
})

為ship字段添加索引

db.fleet.createIndex({"ship.$**": 1})

ship字段包含一個(gè)數(shù)組類(lèi)型的字段coordinates, 字符類(lèi)型的字段type, 數(shù)組類(lèi)型的字段captains. 其中數(shù)組字段coordinates的元素也是數(shù)據(jù),在構(gòu)建通配符索引時(shí),直接將coordinates字段的數(shù)組放入索引當(dāng)中。captains是文檔類(lèi)型的數(shù)據(jù),Mongodb構(gòu)建通配符索引時(shí),會(huì)進(jìn)一步解析到基本元素,將基本元素放入索引當(dāng)中。按照這樣的規(guī)則 ,索引當(dāng)中,存在下面的數(shù)據(jù)

  • "ship.coordinates":[37.786971, -122.399677 ],
  • "ship.coordinates":[37.786971, -122.399677 ],
  • "ship.type":"Cargo Ship",
  • "ship.captains.name":"John Doe",
  • "ship.captains.age":45,
  • "ship.captains.crew":"first mate",
  • "ship.captains.crew":"first engineer"

從上面的例子當(dāng)中可以看到,在構(gòu)建索引時(shí),并沒(méi)有把元素在數(shù)組中的位置也添加到索引當(dāng)中。但mongdb也能夠使用通配符索引,支持帶有數(shù)組元素位置的查詢(xún)。如

db.fleet.find({"ship.captains.0.age": {$gt: 40}})

查看該查詢(xún)的執(zhí)行計(jì)劃

但通配符索引,不支持下面的查詢(xún)

db.fleet.find({
    "ship.coordinates.0.1": 37.786971
})

查看執(zhí)行計(jì)劃,能夠看到使用全表掃描,而不是通配符索引。因?yàn)橥ㄅ浞饕龑⒄麄€(gè)數(shù)組元素作為整體放倒索引數(shù)據(jù)中。而用戶使用數(shù)組當(dāng)中的一個(gè)值來(lái)查詢(xún)時(shí),Mongodb選擇了全表掃描。

Mongodb在構(gòu)建通配符索引時(shí),不會(huì)限制文檔數(shù)組類(lèi)型結(jié)構(gòu)的深度。但查詢(xún)時(shí),如果路徑長(zhǎng)度超過(guò)8, Mongodb會(huì)選擇其他更高效的索引或全表掃描的方式。

到此這篇關(guān)于Mongodb文檔和數(shù)組的通配符索引的文章就介紹到這了,更多相關(guān)Mongodb通配符索引內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mongoDB 多重?cái)?shù)組查詢(xún)(AngularJS綁定顯示 nodejs)

    mongoDB 多重?cái)?shù)組查詢(xún)(AngularJS綁定顯示 nodejs)

    這篇文章主要介紹了mongoDB 多重?cái)?shù)組查詢(xún)(AngularJS綁定顯示 nodejs),需要的朋友可以參考下
    2017-06-06
  • MongoDB的下載、安裝與部署方法

    MongoDB的下載、安裝與部署方法

    這篇文章主要介紹了MongoDB的下載、安裝與部署方法,需要的朋友可以參考下
    2017-05-05
  • MongoDB復(fù)制集原理詳解

    MongoDB復(fù)制集原理詳解

    這篇文章主要介紹了MongoDB復(fù)制集原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • MongoDB分片詳解

    MongoDB分片詳解

    本文分享了MongoDB分片詳細(xì)介紹,分片是MongoDB的擴(kuò)展方式,通過(guò)分片能夠增加更多的機(jī)器來(lái)用對(duì)不斷增加的負(fù)載和數(shù)據(jù),還不影響應(yīng)用,
    2018-03-03
  • 關(guān)于MongoDB謹(jǐn)防索引seek的效率問(wèn)題詳析

    關(guān)于MongoDB謹(jǐn)防索引seek的效率問(wèn)題詳析

    這篇文章主要給大家介紹了關(guān)于MongoDB謹(jǐn)防索引seek的效率問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • MongoDB運(yùn)行日志實(shí)現(xiàn)自動(dòng)分割的方法實(shí)例

    MongoDB運(yùn)行日志實(shí)現(xiàn)自動(dòng)分割的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于MongoDB運(yùn)行日志實(shí)現(xiàn)自動(dòng)分割的方法,文中以一個(gè)MongoDB實(shí)例為例,寫(xiě)了一個(gè)腳本來(lái)實(shí)現(xiàn)自動(dòng)分割MongoDB日志,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • Mongodb單字段索引應(yīng)用詳解

    Mongodb單字段索引應(yīng)用詳解

    mongodb支持在文檔中的任何一個(gè)字段建立單字段索引,包括文檔的頂級(jí)字段,針對(duì)嵌入式文檔建立索引或者針對(duì)嵌入式文檔的某個(gè)字段建立索引,本文給大家介紹Mongodb單字段索引的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2024-07-07
  • MongoDB數(shù)據(jù)庫(kù)的日志文件深入分析

    MongoDB數(shù)據(jù)庫(kù)的日志文件深入分析

    這篇文章主要給大家介紹了關(guān)于MongoDB數(shù)據(jù)庫(kù)日志的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • mongodb主從復(fù)制_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    mongodb主從復(fù)制_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了mongodb主從復(fù)制的相關(guān)資料,討論mongodb的部署技術(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Centos7安裝和卸載Mongodb數(shù)據(jù)庫(kù)的方法

    Centos7安裝和卸載Mongodb數(shù)據(jù)庫(kù)的方法

    MongoDB是一個(gè)跨平臺(tái),面向文檔的數(shù)據(jù)庫(kù),提供高性能,高可用性和易于擴(kuò)展。MongoDB是工作在集合和文檔上一種概念。下面通過(guò)本文給大家分享Centos7安裝和卸載Mongodb數(shù)據(jù)庫(kù)的方法,需要的朋友參考下吧
    2017-11-11

最新評(píng)論