在MongoDB中组织多对多的关系

时间:2015-01-26 14:23:20

标签: ruby-on-rails mongodb many-to-many

我正在构建电子商务Rails应用程序,我想在产品用户之间建立关系。

用户可以“喜欢”许多产品(产品可以被用户收藏)。

用户对他们看到的产品有“历史”。

在SQL数据库中,我知道我可以创建一个历史表并放置product_id和user_id。还有一个被收藏的表,还包含product_id和user_id。

但是在MongoDB中,我该如何建立这种关系呢?

我读了这篇博文:http://blog.markstarkman.com/blog/2011/09/15/mongodb-many-to-many-relationship-data-modeling/并意识到我可以在用户集合中创建一系列产品,并在产品集合中创建一组用户。但我不知道如何设置用户集合中的收藏产品和历史产品。

提前致谢。

修改

思考:我正在考虑创建两个继承自产品模型/集合的模型(ProductFavorited和ProductHistory),并在用户集合中使用它。

1 个答案:

答案 0 :(得分:1)

MongoDB中最好的数据模型适合您的应用程序使用。

所以要问的问题是"你什么时候会看到这些受欢迎的产品?他们是如何展示的?"和"你什么时候能看到这个历史?它是如何显示的?"

一些可能的答案和建议可能是:

  

"用户可以点击标有“收藏夹”的菜单项。并看到   他们所青睐的产品清单。"

     

然后将您计划展示的信息存储在一个中是有意义的   用户文档上的favorites数组。或者,如果您期望用户   文档越来越大,一个单独的favorites集合   只有一个user_id为_id,然后只有收藏夹数组为   文件中唯一的其他元素。

或者:

  

"用户将转到“产品”页面,查看已收藏该产品的其他用户的列表。"

     

然后,将其与所有在产品文档中收藏产品的用户以其他方式存储是有意义的。或者,如果您认为Product文档会变得过大,那么将product_id作为_id,将favorited_users作为数组,这是文档中唯一的其他元素。

要始终牢记的是数据将如何在您的应用程序中使用。

Information about Data Model in MongoDB.