我是NoSQL,MongoDB的新手。如何处理2个或多个集合/文档之间的多对多关系?我们最好使用DBRefs还是嵌入?实际上我已经阅读了MongoDB手册,但我没有找到关于多对多关系的东西。我错过了一些积分?或者MongoDB中没有这种关系? THX!
答案 0 :(得分: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") ]
}