MongoDB中的數(shù)據(jù)在同一集合中具有靈活的模式 schema.documents 。同一集合中的文檔。它們不需要具有相同的字段集或集合中的結(jié)構(gòu)公共字段,文檔可能包含不同類型的數(shù)據(jù)。
MongoDB提供兩種類型的數(shù)據(jù)模型:嵌入式數(shù)據(jù)模型和規(guī)范化數(shù)據(jù)模型。根據(jù)需求,您可以在準(zhǔn)備文檔時(shí)使用這兩個(gè)模型中的任何一個(gè)。
在此模型中,您可以將所有相關(guān)數(shù)據(jù)(嵌入)在一個(gè)文檔中,這也稱為非規(guī)范化數(shù)據(jù)模型。
例如,假設(shè)我們?cè)谌齻€(gè)不同的文檔(Personal_details,Contact 和 Address)中獲取員工的詳細(xì)信息,則可以將所有三個(gè)文檔嵌入到一個(gè)文檔中,如下所示:
{
_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"
}
}在此模型中,您可以使用引用來引用原始文檔中的子文檔。例如,您可以將以下文檔以規(guī)范化模型重寫為:
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"
}根據(jù)用戶要求設(shè)計(jì)架構(gòu)。
如果將它們一起使用,則將它們組合到一個(gè)文檔中。否則,將它們分開(但請(qǐng)確保不需要連接)。
復(fù)制數(shù)據(jù)(但有限制),因?yàn)榇疟P空間比計(jì)算時(shí)間便宜。
在寫入時(shí)進(jìn)行聯(lián)接,而不是在讀取時(shí)進(jìn)行聯(lián)接。
針對(duì)最常見的用例優(yōu)化您的方案。
在架構(gòu)中進(jìn)行復(fù)雜的聚合。
假設(shè)客戶需要為其博客/網(wǎng)站進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì),并查看RDBMS與MongoDB模式設(shè)計(jì)之間的區(qū)別。網(wǎng)站具有以下要求。
每個(gè)帖子都有唯一的標(biāo)題,描述和網(wǎng)址。
每個(gè)帖子可以有一個(gè)或多個(gè)標(biāo)簽。
每個(gè)帖子都有其發(fā)布者的姓名和點(diǎn)贊的總數(shù)。
每個(gè)帖子都有用戶提供的評(píng)論,以及他們的姓名,消息,數(shù)據(jù)時(shí)間和點(diǎn)贊。
在每個(gè)帖子上,可以有零個(gè)或多個(gè)評(píng)論。
在RDBMS架構(gòu)中,用于上述要求的設(shè)計(jì)將至少具有三個(gè)表。
在MongoDB模式中,設(shè)計(jì)將具有一個(gè)帖子集合和以下結(jié)構(gòu)-
{
_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
}
]
}因此,在顯示數(shù)據(jù)時(shí),在RDBMS中,您需要連接三個(gè)表,而在MongoDB中,數(shù)據(jù)將僅從一個(gè)集合中顯示。