在 MongoDB 中存储数据非常灵活,它与关系型数据库完全不同,在关系型数据库中,插入数据之前必须先确定数据表的结构并创建数据表。而 MongoDB 中对文档的结构没有强制要求,只要合理即可。
MongoDB 提供了两种数据模型,分别是嵌入式数据模型和规范化数据模型,您可以根据需要使用其中的任何一种。
在 MongoDB 中模型设计需要注意以下几点:
嵌入式数据模型也称为非规范化数据模型,在该模型中您可以将所有相关的数据存储到一个文档中,例如我们在三个不同的文档中分别存储了一个员工的个人信息、联系方式和地址等信息,您还可以将这些信息整合到一个文档中,如下所示:
{
_id: ObjectId("601f4be6e646844cd045c8a4"),
Emp_ID: "10025AE336",
Personal_details:{
First_Name: "Radhika",
Last_Name: "Sharma",
Date_Of_Birth: "1985-09-26"
},
Contact: {
e-mail: "cdsy.xyz@gmail.com",
phone: "7358022338"
},
Address: {
city: "Hyderabad",
Area: "Madapur",
State: "Telangana"
}
}
在规范化数据模型中,您可以通过引用来将原始文档与子文档关联起来,例如您可以将上面的文档信息以规范化数据模型重写为以下几个文档:
Employee:
{
_id: ObjectId("601f4be6e646844cd045c8a4"),
Emp_ID: "10025AE336"
}
Personal_details:
{
_id: ObjectId("601f50bae646844cd045c8a5"),
empDocID: ObjectId("601f4be6e646844cd045c8a4"),
First_Name: "Radhika",
Last_Name: "Sharma",
Date_Of_Birth: "1985-09-26"
}
Contact:
{
_id: ObjectId("601f50bae646844cd045c8a6"),
empDocID: ObjectId("601f4be6e646844cd045c8a4"),
e-mail: "cdsy.xyz@gmail.com",
phone: "7358022338"
}
Address:
{
_id: ObjectId("601f50bae646844cd045c8a7"),
empDocID: ObjectId("601f4be6e646844cd045c8a4"),
city: "Hyderabad",
Area: "Madapur",
State: "Telangana"
}
【示例】假设我们需要为某个博客或网站进行数据库设计,网站的具体要求如下:
在使用关系型数据库来实现上述需求时至少需要创建三个表,如下图所示:
若使用 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
}
]
}