《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
集合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中的關係能夠是:
接下來,咱們來考慮下用戶與用戶地址的關係。一個用戶能夠有多個地址,因此是一對多的關係。
如下是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"]}})