【MongoDB】深入瞭解MongoDB不可不知的十點

來源:互聯網
上載者:User

標籤:_id   對象   add   parse   運行   god   聲明   style   設定   

一、對象ID的產生

每一個mongoDB文檔那個都要求有一個主鍵。它在每一個集合中對全部的文檔必須是唯一的。主鍵存放在文檔_id欄位中。由12個字元組成;

4c291856       238d3b   19b2     000001  

4位元組時間戳記   機器ID   進程ID  計數器3333

二、BSON

BSON是mongodb中用來標示文檔的二進位格式,它既是儲存格式,也是命令格式。全部文檔都以bson儲存在磁碟上,全部的查詢和命令都用bson文檔來指定。

Db.users.find({_id:ObjectId(‘4c291856238d3b19b2000001’)})

Db.users.find({_id:‘4c291856238d3b19b2000001’})

以上兩種查詢的結果全然不同。當中僅僅有一個能查詢到匹配_id欄位,這全然取決於users集合中的文檔儲存的是BSON對象ID還是標示ID十六進位的BSON字串。

三、彙總命令限制

 在有用性方面,distinct 和group有一個非常大的限制。它們返回的結果集不能超過16M。16M的限制並非這些命令本身所強加的閥值,這是全部的初始查詢結果的大小。

假設distinct和group處理不了你的集合結果集,那麼就僅僅能使用map-reduce取代了。它的結果能夠儲存在集合中的非內聯返回。

四、原子文檔處理

我們知道mongodb不善於處理事物,但要是使用者確實須要須要進行查詢和更新同一時候操作怎麼辦呢? 有一個工具你肯定不想錯過,那就是mongodb的findAndModify命令。

該命令同意對文檔進行原子性更新,並在同一次調用中返回。

db.collections.findAndModify(

{

query:{},update:{},new:true or false 

}

)

預設情況下,findandmodify 命令會返回更新前的文檔,要是返回改動後的文檔,就把new設定為false. 

五、對數組使用$unset

請注意在單個數組元素上使用$unset的結果可能與你設想的不一樣。其結果僅僅是將元素的值設定為null,而非刪除整個元素。要想徹底刪除某個數組元素,能夠用$pull 和$pop操作符。

六、$addToSet和$push的差別

該兩者的功能都是給數組加入一個值。

可是兩者之間有差別,$addToSet要加入的值假設不存在才進行加入操作,可是push僅僅加入一個值;比如:

  tags = [“tools”,”garden”]

假設運行db.collection.update({},{$push:{tag:tools}}) 結果就是 [“tools”,”garden”。“tools”]

假設運行db.collection.update({},{$addToSet:{tag:tools}}) 結果不變

七、稀疏索引建立

在稀疏索引中僅僅會出現被索引鍵有值的文檔,假設想建立稀疏索引,指定{sparse:true}就能夠了。

比如:

Db.product.ensureIndex({sku:1},{unique:true,sparse:true})

Sku可能存在為null的文檔。


八、聲明索引時要小心

因為建立索引比較簡單,所以非常easy在無意間建立索引,假設資料集非常大的話。構建會花費非常長的時間。而且沒辦法中種植。

同一時候建立索引時候最好先排序這樣更加高效。 

九、用Explain(true)具體查詢運行計劃

使用者db.collection.find(condition).explain(true)

十、樂觀鎖

樂觀鎖就是並發控制,這項技術保證在無需鎖定記錄的情況下對器進行徹底更新。要理解它,最簡單的辦法就是想像一個wifi,有多個使用者能夠同一時候編輯一個頁面。但你肯定不希望使用者編輯並更新一個到期的頁面,這是就能夠使用樂觀鎖協議。當使用者試圖儲存他們更改的時候,會在更新操作中添加一個時間戳記。假設該值比這個頁面近期儲存的版本號碼舊,就不讓使用者更新。

這個在mongodb 運行$inc中用到

【MongoDB】深入瞭解MongoDB不可不知的十點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.