2012-05-02 38 views
0

我正在使用Rails和Mongoid。我试图想出一个标签功能(类似于每个用户可以有“最喜欢的”标签的stackoverflow)。Nosql设计 - 标签和mvc

从我读过的关于mongodb的设计文章中,我已经理解我需要停止以“第四常态”形式思考。我一直在想有一个多对多的表,其中tag_iduser_id以及另一个多对多表tag_iditem_id。但从阅读nosql看来,将标签(标签或甚至字符串数组)嵌入每个用户或项目中似乎会好得多。

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

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

回答

0

我不能帮你的这个Ruby的方面,但这里有对MongoDB的侧一些选项..

您可以创建一个标签收集的条目看起来有点像这样:{_id: ObjectId(), title: "Foo Bar"}。然后,每个用户可以有标签的ID值的数组他签约太:

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

然后,您可以使用$操作中检索用户标签的标题:

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