- 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 - ObjectId
- MongoDB - MapReduce
- MongoDB - 文本搜索
- MongoDB - 正则表达式
- 使用 Rockmongo
- MongoDB - GridFS
- MongoDB - 固定大小集合
- 自动递增序列
- MongoDB 有用资源
- MongoDB - 问答
- MongoDB - 快速指南
- MongoDB - 有用资源
- MongoDB - 讨论
MongoDB - 数据建模
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: "[email protected]", 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: "[email protected]", phone: "9848022338" }
地址
{ _id: <ObjectId104>, empDocID: " ObjectId101", city: "Hyderabad", Area: "Madapur", State: "Telangana" }
在 MongoDB 中设计模式时的注意事项
根据用户需求设计模式。
如果您将一起使用对象,请将它们组合到一个文档中。否则将它们分开(但请确保不需要连接)。
复制数据(但要有限制),因为磁盘空间比计算时间便宜。
在写入时进行连接,而不是在读取时进行连接。
针对最频繁的用例优化模式。
在模式中进行复杂的聚合。
示例
假设客户需要为其博客/网站设计数据库,并查看 RDBMS 和 MongoDB 模式设计之间的差异。网站具有以下要求。
每篇文章都有唯一的标题、描述和 URL。
每篇文章可以有一个或多个标签。
每篇文章都有其发布者的名称和点赞总数。
每篇文章都有用户提供的评论,以及他们的姓名、消息、日期时间和点赞。
每篇文章可以有零个或多个评论。
在 RDBMS 模式中,上述要求的设计至少需要三个表。
而在 MongoDB 模式中,设计将拥有一个名为 post 的集合,以及以下结构:
{ _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 中,数据将仅从一个集合中显示。
广告