Mongodb 简明教程

MongoDB - Data Modelling

MongoDB 中的数据具有一定的灵活性模式。同一集合中的文档。它们无需具有相同的字段集或结构。集合中的通用字段可包含不同类型的数据。

Data Model Design

MongoDB 提供两种类型的数据模型:嵌入式数据模型和规范化数据模型。根据需求,在准备文档时可以使用任意一种模型。

Embedded Data Model

在这个模型中,可以将所有相关数据(嵌入)到单个文档中,它也称为非规范化数据模型。

例如,假设我们要在三个不同的文档中获取员工的详细信息,即 Personal_details、Contact 和 Address,可以将这三个文档嵌入到一个文档中,如下所示:

{
	_id: ,
	Emp_ID: "10025AE336"
	Personal_details:{
		First_Name: "Radhika",
		Last_Name: "Sharma",
		Date_Of_Birth: "1995-09-26"
	},
	Contact: {
		e-mail: "radhika_sharma.123@gmail.com",
		phone: "9848022338"
	},
	Address: {
		city: "Hyderabad",
		Area: "Madapur",
		State: "Telangana"
	}
}

Normalized Data Model

在此模型中,可以使用引用来引用原始文档中的子文档。例如,可以按规范化模型的方式重新书写上面的文档:

Employee:

{
	_id: <ObjectId101>,
	Emp_ID: "10025AE336"
}

Personal_details:

{
	_id: <ObjectId102>,
	empDocID: " ObjectId101",
	First_Name: "Radhika",
	Last_Name: "Sharma",
	Date_Of_Birth: "1995-09-26"
}

Contact:

{
	_id: <ObjectId103>,
	empDocID: " ObjectId101",
	e-mail: "radhika_sharma.123@gmail.com",
	phone: "9848022338"
}

Address:

{
	_id: <ObjectId104>,
	empDocID: " ObjectId101",
	city: "Hyderabad",
	Area: "Madapur",
	State: "Telangana"
}

Considerations while designing Schema in MongoDB

  1. 根据用户需求设计你的架构。

  2. 如果你要一起使用对象,将对象组合成一个文档。否则将它们分开(但确保不需要连接)。

  3. 复制数据(但有限制),因为与计算时间相比,磁盘空间很便宜。

  4. 在写入时执行连接,不要在读取时执行。

  5. 针对最频繁的使用案例优化你的架构。

  6. 在架构中进行复杂聚合。

Example

假设一个客户需要一个数据库设计,用于他的博客/网站,并查看 RDBMS 和 MongoDB 架构设计之间的区别。该网站有以下要求。

  1. 每篇文章都有一个唯一的标题、说明和 url。

  2. 每篇文章可以有一个或多个标签。

  3. 每篇文章都有其发布者的姓名和总共的喜欢数。

  4. 每篇文章都有用户给出的评论以及他们的姓名、留言、日期时间和喜欢数。

  5. 在每篇文章上,可以有零个或多个评论。

在 RDBMS 架构中,上述要求的设计将至少有三个表。

rdbms

而在 MongoDB 架构中,设计将有一个集合类和以下结构 −

{
   _id: POST_ID
   title: TITLE_OF_POST,
   description: POST_DESCRIPTION,
   by: POST_BY,
   url: URL_OF_POST,
   tags: [TAG1, TAG2, TAG3],
   likes: TOTAL_LIKES,
   comments: [
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES
      },
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES
      }
   ]
}

因此在显示数据时,在 RDBMS 中你需要连接三个表,而在 MongoDB 中,数据只将从一个集合中显示。