扫码一下
查看教程更方便
MongoDB 的数据是非常的灵活的,在一个集合中的文档可以是多种多样的。它们不需要具有相同的一组字段或结构。集合文档中的公共字段可能包含不同类型的数据。
这种灵活性有助于将文档映射到实体或对象。每个文档都可以匹配所表示实体的数据字段,即使该文档与集合中的其他文档有很大的差异。
MongoDB 提供两种类型的数据模型:
根据要求,我们可以在设计准备文档时使用两种模型中的任意一种。
在此模型中,我们可以将所有相关数据“嵌入”在单个文档中,也称为非规范化数据模型。
嵌入式数据模型允许应用程序在同一个数据库记录中存储相关信息。因此,应用程序可能需要发出更少的查询和更新来完成常见操作。
通常,在以下情况下使用嵌入式数据模型:
一般来说,嵌入为读取操作提供了更好的性能,并且能够在单个数据库操作中请求和检索相关数据。嵌入式数据模型使得在单个原子写入操作中更新相关数据成为可能。
例如,假设我们在三个不同的文档中获取员工的详细信息,即 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"
}
}
规范化数据模型使用文档之间的 引用来描述关系。
通常,以下场景使用规范化数据模型:
例如,我们可以使用规范化模型重写上述文档:
{
_id: <ObjectId101>,
Emp_ID: "10025AE336"
}
{
_id: <ObjectId102>,
empDocID: " ObjectId101",
First_Name: "Radhika",
Last_Name: "Sharma",
Date_Of_Birth: "1995-09-26"
}
{
_id: <ObjectId103>,
empDocID: " ObjectId101",
e-mail: "radhika_sharma.123@gmail.com",
phone: "9848022338"
}
{
_id: <ObjectId104>,
empDocID: " ObjectId101",
city: "Hyderabad",
Area: "Madapur",
State: "Telangana"
}
假设客户需要为其博客/网站设计数据库,并查看 RDBMS 和 MongoDB 模式设计之间的差异。网站有以下要求。
在 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 中,只需要显示一个集合中的数据。