- MongoDB 教程
- MongoDB - 主页
- MongoDB - 概述
- MongoDB - 优点
- MongoDB - 环境
- MongoDB - 数据建模
- MongoDB - 创建数据库
- MongoDB - 删除数据库
- MongoDB - 创建集合
- MongoDB - 删除集合
- MongoDB - 数据类型
- MongoDB - 插入文档
- MongoDB - 查询文档
- MongoDB - 更新文档
- MongoDB - 删除文档
- MongoDB - 投影
- MongoDB - 限制记录
- MongoDB - 记录排序
- MongoDB - 索引
- MongoDB - 聚合
- MongoDB - 复制
- MongoDB - 分片
- MongoDB - 创建备份
- MongoDB - 部署
- MongoDB-Java
- MongoDB-PHP
- 高级 MongoDB
- MongoDB - 关系
- MongoDB - 数据库参考
- MongoDB - 涵盖查询
- MongoDB - 分析查询
- MongoDB - 原子操作
- MongoDB - 高级索引
- MongoDB - 索引限制
- MongoDB - 对象 ID
- MongoDB - 映射减少
- MongoDB - 文本搜索
- MongoDB - 正则表达式
- 与 Rockmongo 合作
- MongoDB-GridFS
- MongoDB - 上限集合
- 自动递增序列
- MongoDB 有用资源
- MongoDB - 问题与解答
- MongoDB - 快速指南
- MongoDB - 有用的资源
- MongoDB - 讨论
MongoDB - 数据建模
MongoDB 中的数据具有灵活的 schema.documents 在同一个集合中。它们不需要具有相同的字段集或结构。集合文档中的公共字段可能包含不同类型的数据。
数据模型设计
MongoDB 提供两种类型的数据模型:嵌入式数据模型和规范化数据模型。根据要求,您可以在准备文档时使用任一模型。
嵌入式数据模型
在此模型中,您可以将所有相关数据嵌入(嵌入)在单个文档中,它也称为非规范化数据模型。
例如,假设我们在三个不同的文档中获取员工的详细信息,即个人详细信息、联系人和地址,您可以将所有三个文档嵌入到一个文档中,如下所示 -
{
_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"
}
在 MongoDB 中设计 Schema 时的注意事项
根据用户需求设计您的架构。
如果您要一起使用对象,请将它们合并到一个文档中。否则将它们分开(但确保不需要连接)。
复制数据(但有限),因为与计算时间相比,磁盘空间很便宜。
在写入时进行连接,而不是在读取时进行连接。
针对最常见的用例优化您的架构。
在模式中进行复杂的聚合。
例子
假设客户需要为其博客/网站进行数据库设计,并了解 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 中,将仅显示一个集合中的数据。