Azure CosmosDB (11) MongoDB概念 Windows Azure Platform 系列文章目錄

  《Windows Azure Platform 系列文章目錄html

  

  Azure Cosmos DB兼容MongoDB的API,下表將幫助咱們更容易理解MongoDB中的一些概念:數據庫

SQL概念 MongoDB概念 說明
Database Database 數據庫
Table Collection 數據表/集合
Row Document 數據記錄行/文檔
Column Field 數字字段
Index Index 索引
Table Join   錶鏈接,MongoDB不支持
Primary Key Primary Key 主鍵,MongoDB自動將_id字段設置爲主鍵

  經過下圖實例,咱們也能夠更直觀的瞭解Mongo中的一些概念:數組

  

 

  文檔Document數據結構

  文檔是一組鍵值(key-value)對(即 BSON)。MongoDB 的文檔不須要設置相同的字段,而且相同的字段不須要相同的數據類型,這與關係型數據庫有很大的區別,也是 MongoDB 很是突出的特色。post

  一個簡單的文檔例子以下:ui

  {"site":"http://www.cnblogs.com/threestone", "name":"個人博客"}google

 

  須要注意的是:url

  1. 文檔中的鍵/值對是有序的。
  2. 文檔中的值不只能夠是在雙引號裏面的字符串,還能夠是其餘幾種數據類型(甚至能夠是整個嵌入的文檔)。
  3. MongoDB區分類型和大小寫。
  4. MongoDB的文檔不能有重複的鍵。
  5. 文檔的鍵是字符串。除了少數例外狀況,鍵可使用任意UTF-8字符。

 

  集合Collectionspa

  集合就是 MongoDB 文檔組,相似於 RDBMS (關係數據庫管理系統:Relational Database Management System)中的Table。設計

  集合存在於數據庫中,集合沒有固定的結構,這意味着你在對集合能夠插入不一樣格式和類型的數據,但一般狀況下咱們插入集合的數據都會有必定的關聯性。

   好比,咱們能夠將如下不一樣數據結構的文檔插入到集合中:

  {"site":"www.baidu.com"}

  {"site":"www.google.com","name":"Google"}

  {"site":"http://www.cnblogs.com/threestone", "name":"個人博客"}

 

 

  MongoDB Relationship關係

  MongoDB的關係,表示多個Document之間在邏輯上的相互聯繫。

  文檔間能夠經過嵌入和引用來建議聯繫。

  MongoDB中的關係能夠是:

  1. 1:1
  2. 1:N
  3. N:1
  4. N:N

  接下來,咱們來考慮下用戶與用戶地址的關係。一個用戶能夠有多個地址,因此是一對多的關係。

  如下是user文檔的簡單結構:

{
"_id":ObjectId("52ffc33cd85242f436000001"),
"name": "Tom Hanks",
"contact": "987654321",
"dob": "01-01-1991"
}

 

如下是address文檔的簡單結構

{
   "_id":ObjectId("52ffc4a5d85242602e000000"),
   "building": "22 A, Indiana Apt",
   "pincode": 123456,
   "city": "Los Angeles",
   "state": "California"
} 

 

  嵌入式方法

  使用嵌入式方法,咱們能夠把用戶地址嵌入到用戶的文檔中

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address": [
      {
         "building": "22 A, Indiana Apt",
         "pincode": 123456,
         "city": "Los Angeles",
         "state": "California"
      },
      {
         "building": "170 A, Acropolis Apt",
         "pincode": 456789,
         "city": "Chicago",
         "state": "Illinois"
      }]
} 

 

  以上數據保存在單一的文檔中,能夠比較容易的獲取和維護數據。 你能夠這樣查詢用戶的地址:

>db.users.findOne({"name":"Tom Benzamin"},{"address":1})

 

 

  引用式關係

  引用式關係是設計數據庫時常常用到的方法,這種方法把用戶數據文檔和用戶地址數據文檔分開,經過引用文檔的 id 字段來創建關係。

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address_ids": [
      ObjectId("52ffc4a5d85242602e000000"),
      ObjectId("52ffc4a5d85242602e000001")
   ]
}

  

  以上實例中,用戶文檔的 address_ids 字段包含用戶地址的對象id(ObjectId)數組。

  咱們能夠讀取這些用戶地址的對象id(ObjectId)來獲取用戶的詳細地址信息。

  這種方法須要兩次查詢,第一次查詢用戶地址的對象id(ObjectId),第二次經過查詢的id獲取用戶的詳細地址信息。

>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
相關文章
相關標籤/搜索