mongodb學(xué)習(xí)(2)索引有關(guān)

  1. _id索引
    _id索引是絕大多數(shù)集合默認(rèn)建立的索引腐魂,對(duì)于每個(gè)插入的數(shù)據(jù),MongDB都會(huì)自動(dòng)生成一條唯一的_id字段理盆,db.posts.getIndexes()可以獲取到該集合的索引喊儡,創(chuàng)建一個(gè)集合之后颊糜,系統(tǒng)會(huì)默認(rèn)給這個(gè)集合創(chuàng)建一個(gè)_id索引
db.posts.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "posts.posts"
    }
]
  1. 普通索引
    創(chuàng)建普通索引:

db.collection.createIndex(keys, options)

語(yǔ)法中 Key 值為你要?jiǎng)?chuàng)建的索引字段,1 為指定按升序創(chuàng)建索引秃踩,如果你想按降序來創(chuàng)建索引指定為 -1 即可衬鱼。創(chuàng)建索引后可以加快查詢速度。

可以對(duì)文檔中的多個(gè)鍵單獨(dú)創(chuàng)建索引或者創(chuàng)建聯(lián)合索引憔杨。

  1. MongoDB 高級(jí)索引
    1)索引子文檔字段:可以對(duì)文檔的子文檔創(chuàng)建索引
> db.col.insert({
...    "address": {
...       "city": "Los Angeles",
...       "state": "California",
...       "pincode": "123"
...    },
...    "tags": [
...       "music",
...       "cricket",
...       "blogs"
...    ],
...    "name": "Tom Benzamin"
... })
WriteResult({ "nInserted" : 1 })

> db.col.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 5,
    "numIndexesAfter" : 6,
    "ok" : 1
}

> db.col.find({"address.city":"Los Angeles"})
{ "_id" : ObjectId("5c9c581279239019d92fa21a"), "address" : { "city" : "Los Angeles", "state" : "California", "pincode" : "123" }, "tags" : [ "music", "cricket", "blogs" ], "name" : "Tom Benzamin" }

2)數(shù)組索引
可以對(duì)文檔中的數(shù)據(jù)建立索引:

> db.posts.find()
{ "_id" : ObjectId("5c9c5b8a79239019d92fa21b"), "post_text" : "enjoy the mongodb articles on Runoob", "tags" : [ "mongodb", "runoob" ] }
{ "_id" : ObjectId("5c9c5c2079239019d92fa21c"), "post_text" : "enjoy the mongodb articles on monday" }
{ "_id" : ObjectId("5c9c6f1d79239019d92fa21e"), "name" : "hi,today is sunny day,today is Monday" }
{ "_id" : ObjectId("5c9c729879239019d92fa21f"), "name" : "lihong" }
{ "_id" : ObjectId("5c9c780a79239019d92fa220"), "name" : "liming" }
> db.posts.ensureIndex({"tags":1})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 2,
    "numIndexesAfter" : 2,
    "note" : "all indexes already exist",
    "ok" : 1
}
> db.posts.find({tags:"mongodb"})
{ "_id" : ObjectId("5c9c5b8a79239019d92fa21b"), "post_text" : "enjoy the mongodb articles on Runoob", "tags" : [ "mongodb", "runoob" ] }
  1. 全文檢索
    全文檢索對(duì)每一個(gè)詞建立一個(gè)索引鸟赫,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時(shí)消别,檢索程序就根據(jù)事先建立的索引進(jìn)行查找抛蚤,并將查找的結(jié)果反饋給用戶的檢索方式。
    開啟全文檢索
> db.adminCommand({setParameter:true,textSearchEnabled:true})
{
    "ok" : 0,
    "errmsg" : "attempted to set unrecognized parameter [textSearchEnabled], use help:true to see options "
}

創(chuàng)建全文索引:先在集合posts中插入兩個(gè)文檔寻狂,再對(duì)文檔中的post_text字段建立索引霉颠,然后執(zhí)行搜索

> db.posts.insert({
...    "post_text": "enjoy the mongodb articles on Runoob",
...    "tags": [
...       "mongodb",
...       "runoob"
...    ]
... })
WriteResult({ "nInserted" : 1 })
> db.posts.insert({"post_text": "enjoy the mongodb articles on monday"})
WriteResult({ "nInserted" : 1 })
> db.posts.ensureIndex({post_text:"text"})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}
> db.posts.find({$text:{$search:"enjoy"}})
{ "_id" : ObjectId("5c9c5b8a79239019d92fa21b"), "post_text" : "enjoy the mongodb articles on Runoob", "tags" : [ "mongodb", "runoob" ] }
{ "_id" : ObjectId("5c9c5c2079239019d92fa21c"), "post_text" : "enjoy the mongodb articles on monday" }

查找索引名:

> db.posts.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "posts.posts"
    },
    {
        "v" : 2,
        "key" : {
            "_fts" : "text",
            "_ftsx" : 1
        },
        "name" : "post_text_text",
        "ns" : "posts.posts",
        "weights" : {
            "post_text" : 1
        },
        "default_language" : "english",
        "language_override" : "language",
        "textIndexVersion" : 3
    }
]

刪除全文檢索:

db.posts.dropIndex("post_text_text")

索引是特殊的數(shù)據(jù)結(jié)構(gòu),以易于遍歷的形式存儲(chǔ)數(shù)據(jù)集的一小部分荆虱。 索引存儲(chǔ)特定字段或一組字段的值蒿偎,按照索引中指定的字段值排序。
使用索引怀读,可以加快索引相關(guān)的查詢诉位,也相應(yīng)地帶來一些壞處:
每個(gè)索引占據(jù)一定的存儲(chǔ)空間,在進(jìn)行插入菜枷,更新和刪除操作時(shí)也需要對(duì)索引進(jìn)行操作苍糠。所以,如果你很少對(duì)集合進(jìn)行讀取操作啤誊,建議不使用索引岳瞭。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蚊锹,隨后出現(xiàn)的幾起案子瞳筏,更是在濱河造成了極大的恐慌,老刑警劉巖牡昆,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姚炕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡丢烘,警方通過查閱死者的電腦和手機(jī)柱宦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來播瞳,“玉大人掸刊,你說我怎么就攤上這事∮遥” “怎么了忧侧?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵石窑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我苍柏,道長(zhǎng)尼斧,這世上最難降的妖魔是什么姜贡? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任试吁,我火速辦了婚禮,結(jié)果婚禮上楼咳,老公的妹妹穿的比我還像新娘熄捍。我一直安慰自己,他們只是感情好母怜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布余耽。 她就那樣靜靜地躺著,像睡著了一般苹熏。 火紅的嫁衣襯著肌膚如雪碟贾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天轨域,我揣著相機(jī)與錄音袱耽,去河邊找鬼。 笑死干发,一個(gè)胖子當(dāng)著我的面吹牛朱巨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播枉长,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼冀续,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了必峰?” 一聲冷哼從身側(cè)響起洪唐,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吼蚁,沒想到半個(gè)月后桐罕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桂敛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年功炮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片术唬。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡薪伏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粗仓,到底是詐尸還是另有隱情嫁怀,我是刑警寧澤设捐,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站塘淑,受9級(jí)特大地震影響萝招,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜存捺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一槐沼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捌治,春花似錦岗钩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至森枪,卻和暖如春视搏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背县袱。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工浑娜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人显拳。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓棚愤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親杂数。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宛畦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容