MongoDB 遊標和索引

來源:互聯網
上載者:User
遊標

遊標是指資料可以一行行的進行操作,非常類似於 ResultSet 資料處理。在 MongoDB 資料庫裡面,對於遊標的控制非常簡單,只需要使用 find() 函數就可以返回遊標了。

對於返回的遊標,若要想進行操作,則使用以下兩個函數: 判斷是否有下一行資料:hasNest() 取出當前資料:next()

例如:

var cursor = db.students.find();cursor.hasNext();cursor.next();

以上是遊標的操作形式,但是是實際上不可能這麼去用,因為必須利用迴圈才能夠輸出內容。

範例:編寫具體的作業碼

var cursor = db.students.find();while(cursor.hasNext()){     var doc = cursor.next();     print(doc.name);}

相當於每一個資料都單獨拿出來進行逐行的控制。當遊標資料取出來之後,實際上每行資料返回的都是一個 Object類型的內容,那麼如果需要將資料按照 json 的形式出現,則可以使用 printjson() 函數完成。代碼如下:

var cursor = db.students.find();while(cursor.hasNext()){     var doc = cursor.next();     printjson(doc.name);}

在所有的已知資料庫,只有 MongoDB 的遊標操作是最簡單,最直觀的。 索引

在任何的資料庫之中,索引都是一種提升資料庫檢索效能的手段,這一點在 MongoDB 資料庫之中同樣是存在的。

MongoDB 索引建立分為兩種:自動建立和手工建立。

這裡寫代碼片

此時在 students 集合上並沒有去設定任何的索引,通過 getIndexes()

範例:查詢預設狀態下的 students 集合的索引內容

db.students.getIndexes();

若建立自己的索引,文法如下: 索引建立:db.集合名稱.ensureIndex({“列”: 1})
設定 1 時,表示索引將按照升序的方式進行排列 設定 -1 時,表示索引將按照降序的方式進行排列。 唯一索引

“唯一索引”主要目的是用在某一個欄位上,使該欄位的內容不重複。

範例:建立唯一索引

db.students.ensure({"name": 1}, {"unique": true});
到期索引

在一些程式網站會出現若干秒之後,資訊被刪除的情況。例如:手機資訊驗證碼。在 MongoDB 裡面可以輕鬆實現到期索引,但是這個時間往往不怎麼準確(這個特性在進行一些臨時資料儲存的時候非常有協助)。

範例:在一個 phones 集合裡面設定到期索引

db.phones.ensureIndex({"time": 1}, {"expireAfterSeconds: 10"}) //設定索引在 10 秒後到期
全文索引

在一些資訊管理平台上經常需要進行資訊模糊查詢,最早的時候是利用某個欄位上實現的某種查詢,但是這個時候返回的資訊並不會很準確,因為只能查詢 A 欄位或是 B 欄位,而在 MongoDB 裡面實現了非常簡單的全文檢索索引。

範例:定義一個新的集合

db.news.insert({"title":"mldn mldnjava lxh gyh", "content": "gyh"})db.news.insert({"title":"mldn mldnjava lxh", "content": "java"})db.news.insert({"title":"gyh", "content": "sfq"})db.news.insert({"title":"gyh", "content": "gry"})db.news.insert({"title":"sfq", "content": "gry"})

範例:設定全文檢索索引
//待續

“$text” 判斷符用於表示全文檢索索引。

“$search“運算子用於資料的查詢,使用如下: 查詢指定關鍵字:{“$search”: “查詢關鍵字”} 查詢多個關鍵字(即”或“關係):{“$search”: “查詢關鍵字 查詢關鍵字 …”} 查詢多個關鍵字(即”與“關係):{“$search”: “\”查詢關鍵字\” \”查詢關鍵字\” …”} 查詢多個關鍵字(排除某一個):{“$search”: “查詢關鍵字 查詢關鍵字 …-排除關鍵字”}
範例:查詢單個內容

db.news.find({"$text": {"$search": "gry"}});

範例:包含有 “gry” 與 “sfq” 的資訊

db.news.find({"$text": {"$search": "gry gyh"}});

範例:同時包含有 “mldn” 與 “lxh” 的內容

db.news.find({"$text": {"$search": "\"mldn\" \"lxh\""}});

範例:包含有 “mldn” 但沒有 “gyh” 的內容

db.news.find({"$text": {"$search": "\"mldn\" \"lxh\" -gyh"}})

但是在進行全文檢索索引操作的時候,還可以使用相似性的打分來判斷檢索成果。

範例:為結果打分

db.news.find({"text": {"$search": "gyh"}}, {"score": {"$meta": "textScore"}})db.news.find({"text": {"$search": "gyh"}}, {"score": {"$meta": "textScore"}})

按照打分的成績進行排列,實際上就可以實現更加準確的資訊檢索。

當欄位太多時,可以為所有的欄位設定全文檢索索引。

範例:為所有欄位設定全文檢索索引

db.news.ensure({"$**": "text"});
地理資訊索引

地理資訊索引分為兩類: 2D平面索引 和 2DSphere球面索引

在2D平面索引裡面基本上能夠儲存的資訊都是座標,而且座標儲存的就是經緯度座標。

範例:定義一個商鋪的集合

db.shop.insert({loc: [10, 10]});db.shop.insert({loc: [11, 10]});db.shop.insert({loc: [10, 11]});db.shop.insert({loc: [12, 15]});db.shop.insert({loc: [16, 17]});db.shop.insert({loc: [90, 90]});db.shop.insert({loc: [120, 130]});

//待續

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.