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"]}})
相关文章
相关标签/搜索