与嵌入式文档构建一对多关系模型

在本页面

Overview

MongoDB 中的数据具有弹性模式Collections不强制执行document结构。影响数据建模方式的决策会影响应用程序性能和数据库容量。请参阅数据建模概念,以获取有关 MongoDB 中数据建模的完整概述。

本文档描述了一种数据模型,该数据模型使用embedded文档来描述所连接数据之间的关系。

Pattern

考虑以下 Map 顾客和多个地址关系的示例。该示例说明了如果您需要在另一个上下文中查看许多数据实体,则与引用相比,嵌入的优势。在patronaddress数据之间的一对多关系中,patron具有多个address实体。

在规范化数据模型中,address文档包含对patron文档的引用。

{
   _id: "joe",
   name: "Joe Bookreader"
}

{
   patron_id: "joe",
   street: "123 Fake Street",
   city: "Faketon",
   state: "MA",
   zip: "12345"
}

{
   patron_id: "joe",
   street: "1 Some Other Street",
   city: "Boston",
   state: "MA",
   zip: "12345"
}

如果您的应用程序经常使用name信息检索address数据,则您的应用程序需要发出多个查询来解析引用。更好的方案是将address数据实体嵌入到patron数据中,如以下文档所示:

{
   _id: "joe",
   name: "Joe Bookreader",
   addresses: [
                {
                  street: "123 Fake Street",
                  city: "Faketon",
                  state: "MA",
                  zip: "12345"
                },
                {
                  street: "1 Some Other Street",
                  city: "Boston",
                  state: "MA",
                  zip: "12345"
                }
              ]
 }

使用嵌入式数据模型,您的应用程序可以通过一个查询来检索完整的顾客信息。