《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"]}})