mongodb指南(翻譯)(二十四) – developer zone – 插入對象(一)簡介

來源:互聯網
上載者:User

當我們向Mongodb寫資料,它們永遠是以文檔格式插入的。文檔是一種資料結構,類似於JSON,Python 字典,和 Ruby的散列。在這裡,我們多聊聊面向文檔和怎樣向Mongodb插入資料。

面向文檔

面向文檔的資料庫儲存“文檔”,但是這裡的文檔指的是結構化的文檔 - 該術語可能來自於"XML 文檔"。其他結構化的資料,如JSON,甚至在很多語言中的內嵌字典,都有著相似的性質。

儲存在Mongodb中的文檔是類JSON的。JSON是一種儲存程式中對象風格資料的很好的方法,一定意義上講它是語言無關並且是基於一些標準的。

為了更加高效,Mongodb使用了一種稱為BSON的格式,以二進位的形式呈現資料。BSON在掃描指定欄位時比JSON要快。同時BSON增加了一些額外的類型,如日期類型和位元組數群組類型。BSON可以很容易映射為JSON或者從JSON映射,並且在很多程式設計語言中可以映射為多種資料結構。

用戶端驅動將資料序列化為BSON,然後通過線路傳輸資料到資料庫。資料以BSON格式儲存到硬碟。這樣的話,在檢索資料時,資料庫只需要做很少量的轉換就可以將資料發送出,表現出很高的效率。用戶端驅動將收到的BSON對象還原序列化為自己本地語言的格式。

JSON

舉例來說,下面的“文檔”就可以儲存在Mongodb中:

{ author: 'joe',
created : new Date('03/28/2009'),
title : 'Yet another blog post',
text : 'Here is the text...',
tags : [ 'example', 'joe' ],
comments : [ { author: 'jim', comment: 'I disagree' },
{ author: 'nancy', comment: 'Good post' }
]
}

這個文檔是一個部落格文章,因此我們可以使用shell將它儲存在一個“posts”集合中:

> doc = { author : 'joe', created : new Date('03/28/2009'), ... }
> db.posts.insert(doc);

Mongodb理解BSON對象的內部結構--並不僅僅是可以儲存它們,mongodb可以對內部欄位進行查詢並且可以對這些欄位建立索引。例如這個查詢:

> db.posts.find( { "comments.author" : "jim" } )

是可能的,它的意思是“查詢所有的包含一條作者為jiim的文章的部落格文章”。

Mongo友好 模式
mongo可以通過很多方式來使用,第一直覺就是它和使用關係型資料庫非常類似。mongo就是設計用來處理包含豐富內容對象的,並且可以表現的很好。
儲存樣本

如果你正在建立一個網上商店,使用的是關係型資料庫,你的資料結構可能是類似於:

item
title
price
sku
item_features
sku
feature_name
feature_value

你可能會這樣組織資料庫結構因為不同的item有著不同的feature,並且你不希望所有可能的feature都儲存到一張表中。你也可以在mongo實現同樣的資料結構,但是在mongo中可能會更簡便:

item : {
"title" : <title> ,
"price" : <price> ,
"sku" : <sku> ,
"features" : {
"optical zoom" : <value> ,
...
}
}

這樣做非常棒:

  • 你可以一次查詢到整個item
  • 某個item的所有資料存放區在磁碟上的同一塊地區,這樣一次磁碟尋找就可以搞定了

現在,乍一看似乎有一些問題,但其實我們都已經考慮到了。

  • 你可能需要插入或者更新一個單獨的feature。可以這樣來操作:

    • db.items.update( { sku : 123 } , { "$set" : { "features.zoom" : "5" } } )

        

  • 增加一個feature需要在磁碟上面移動整個item嗎?不需要。mongo為每一個對象預留了一些空間來適應它的增長。這也會預防引起索引的改變。

聯繫我們

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