Nosql设计 - 标签和mvc

时间:2012-05-02 17:18:33

标签: ruby-on-rails mongodb tags mongoid

我正在使用Rails和Mongoid。我正在尝试提出一个标记功能(类似于stackoverflow,因为每个用户都可以拥有“最喜欢的”标签)。

从我读过的有关mongodb的设计文章中,我了解到我需要停止以“第四常态”形式思考。我一直在考虑使用tag_iduser_id创建多对多的表,并使用tag_iditem_id创建多对多的表。但是从阅读有关nosql的内容来看,在每个用户或项目中嵌入标记(作为标记甚至是字符串数组)似乎要好得多。

“tags”集合中会有一个标签列表,应用程序将控制用户是否可以在其收藏夹中添加标签。

我正在试图弄清楚如何做到这一点。我tag模型在key上是否有title并且只在用户模型中存储了keys的数组?在这种情况下,“链接”或“嵌入”会更好吗?我正在考虑如何检索标记,因为它们有一个密钥,例如foo-bar,标题为Foo Bar。如果我需要检索用户的标签,那么我是否需要遍历数组并获取每个标签模型以获取标题?

1 个答案:

答案 0 :(得分:0)

我无法帮助你解决Ruby方面的问题,但是MongoDB方面有一些选项..

您可以创建一个标签集合,其条目看起来像这样:{_id: ObjectId(), title: "Foo Bar"}。然后,每个用户都可以拥有他订阅的标签的id值数组:

{ username: ...,
  tags: [ObjectId(), ObjectId(), ... ]}

然后,您可以使用$ in运算符检索用户标记的标题:

db.tags.find({_id: { $in: [array from user] }});