如何在 MongoDB 中建模关系? [复制]

Posted

技术标签:

【中文标题】如何在 MongoDB 中建模关系? [复制]【英文标题】:How to model relationships in MongoDB? [duplicate] 【发布时间】:2014-11-01 18:23:32 【问题描述】:

我最近开始在 MongoDB 学习,但我不太了解我们如何建立系统中实体之间的关系。

所以,由于我习惯于以 SQL 方式建立这种关系,当我将逻辑更改为以 NoSQL 方式思考时,我会感到有些困惑。

我看到 MongoDB 具有建模类型:嵌入式和引用。

如果我理解正确,引用就像我们在 SQL 中所做的:

示例:1 对 N

创建两个表来表示实体,例如用户和地址。

创建用户对象和地址对象

将地址 ID 放入用户对象中


   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address_ids": [
      ObjectId("52ffc4a5d85242602e000000"),
      ObjectId("52ffc4a5d85242602e000001")
   ]

和嵌入式:

只创建一个表,在本例中为 User。

创建一个用户对象并在其中放置地址对象:


   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address": [
      
         "building": "22 A, Indiana Apt",
         "pincode": 123456,
         "city": "Los Angeles",
         "state": "California"
      ,
      
         "building": "170 A, Acropolis Apt",
         "pincode": 456789,
         "city": "Chicago",
         "state": "Illinois"
      ]

所以,我的问题是:

要使用 MongoDB 等 NoSQL 数据库的最佳功能,我必须使用嵌入式建模?

在嵌入式建模中,我只创建了一个实体,而里面的实体,在这种情况下是地址对象,将没有 ID,因为我没有创建表?

【问题讨论】:

解决这个问题的最简单方法是考虑应用程序将如何访问这些数据。您需要将address 放入user 中,如果从应用程序中检索用户时,您还需要所有关联的地址对象,因此无需连接(MongoDB 不支持) . 【参考方案1】:

您对 MongoDB 的看法是正确的。正如您所说,您有两种方法来存储数据。 最好的方法取决于你需要什么。

如果你的地址对象要在别处使用,把它放在另一个表中,如果没有,你可以直接把它放在你的对象中。

如果您将 MongoDB 与 NodeJS 一起使用,则可以使用 MongooseJS。它是一种框架,具有为您的 mongodb 对象定义模式的特殊性。它特别适用于嵌入对象,因为它为您嵌入的每个对象添加了一个 objectId。

【讨论】:

我对这个NodeJS一无所知:/。我会寻找有关它的东西。只是为了确认我的知识:当嵌入的对象不会出现在任何其他集合中时,我会使用嵌入建模。因此,在这种情况下,Address 不是一个很好的例子。因为我可以在许多其他收藏中使用它。正确吗? 对不起,我会在另一个答案中举个例子 对不起,从今天开始我没有发送 cmets 的权利。正如我昨天所说,也许你的例子最好的方法是像这样分割你的地址对象pastebin.com/fKeeP2mD

以上是关于如何在 MongoDB 中建模关系? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB实战-面向文档的数据(找到最合适的数据建模方式)

如何实现has_many:通过与Mongoid和mongodb的关系?

如何在 MongoDb 中为这样的链接帐户建模?

MongoDB 一对多关系建模

Node.js、angular.js 和 MongoDB 入门、建模关系和其他提升技巧 [关闭]

如何使用 MongoDB 建模“点赞”投票系统