如何在 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的关系?