2

我对 NoSQL、MongoDB 很陌生。如何处理 2 个或多个集合/文档之间的多对多关系?我们最好使用 DBRefs 还是嵌入?实际上我已经阅读了 MongoDB 手册,但是我没有找到关于多对多关系的内容。我错过了一些点?或者MongoDB中没有这种关系?谢谢!

4

1 回答 1

3

嵌入与参考

这是嵌入与引用的问题,对于 MongoDB 的新用户来说,这是一个常见的混淆来源。有一个适用于大多数模式设计方案的简单经验法则:当子对象始终出现在其父对象的上下文中时嵌入。否则,将子对象存储在单独的集合中。

嵌入或引用它取决于应用程序。假设您正在 MongoDB 中构建一个简单的应用程序来存储博客文章和评论。如果评论总是出现在博客文章中,并且不需要以任意方式排序(按发布日期、评论排名等) on),然后嵌入就可以了。但是,例如,如果您希望能够显示最新的评论,而不管它们出现在哪个帖子上,那么您将需要参考。嵌入可能会提供轻微的性能优势,但引用要灵活得多。

多对多

在 RDBMS 中,您使用连接表来表示多对多关系;在 MongoDB 中,您使用数组键。例如,每个产品都包含一个类别 ID 数组,并且产品和类别都有自己的集合。如果你有两个简单的类别文件

{ _id: ObjectId("4d6574baa6b804ea563c132a"),
title: "Epiphytes"
}

{ _id: ObjectId("4d6574baa6b804ea563c459d"),
title: "Greenhouse flowers"
}

那么属于这两个类别的产品将如下所示:

{ _id: ObjectId("4d6574baa6b804ea563ca982"),
name: "Dragon Orchid",
category_ids: [ ObjectId("4d6574baa6b804ea563c132a"),
ObjectId("4d6574baa6b804ea563c459d") ]
}
于 2013-08-16T16:16:35.620 回答