MongoDB 数据建模

MongoDB 数据建模

MongoDB中的数据具有灵活的模式。相同集合中的文档不需要具有相同的字段集或结构。在一个集合的文档中,常见字段可能包含不同类型的数据。

数据模型设计

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"
    }
}

标准化数据模型

在这个模型中,你可以使用引用来引用原始文件中的子文档。例如,你可以将上述文档重写为标准化模型中的:

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"
}

在设计MongoDB中的模式时考虑的要点

  • 根据用户要求设计模式。

  • 如果您将它们一起使用,请将对象组合到一个文档中。否则分开它们(但请确保不需要连接)。

  • 复制数据(但有限),因为磁盘空间比计算时间便宜。

  • 在写入时执行连接,而不是在读取时执行。

  • 针对最频繁使用的用例优化模式。

  • 在模式中进行复杂的聚合。

示例

假设客户需要一个用于他的博客/网站的数据库设计,并查看关系数据库管理系统(RDBMS)和MongoDB模式设计之间的差异。网站具有以下要求。

  • 每篇文章都有唯一的标题、描述和URL。

  • 每篇文章可以有一个或多个标签。

  • 每篇文章都有其发布者的名称和总点赞数。

  • 每篇文章都有用户提供的评论,包括他们的名称、留言、日期和点赞数。

  • 每篇文章上可以有零个或多个评论。

在RDBMS模式中,满足上述要求的设计将至少有三个表。

MongoDB 数据建模

在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中,数据仅从一个集合中显示。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程