我正在使用Rails和Mongoid。我正在尝试提出一个标记功能(类似于stackoverflow,因为每个用户都可以拥有“最喜欢的”标签)。
从我读过的有关mongodb的设计文章中,我了解到我需要停止以“第四常态”形式思考。我一直在考虑使用tag_id
和user_id
创建多对多的表,并使用tag_id
和item_id
创建多对多的表。但是从阅读有关nosql的内容来看,在每个用户或项目中嵌入标记(作为标记甚至是字符串数组)似乎要好得多。
“tags”集合中会有一个标签列表,应用程序将控制用户是否可以在其收藏夹中添加标签。
我正在试图弄清楚如何做到这一点。我tag
模型在key
上是否有title
并且只在用户模型中存储了keys
的数组?在这种情况下,“链接”或“嵌入”会更好吗?我正在考虑如何检索标记,因为它们有一个密钥,例如foo-bar
,标题为Foo Bar
。如果我需要检索用户的标签,那么我是否需要遍历数组并获取每个标签模型以获取标题?
答案 0 :(得分:0)
我无法帮助你解决Ruby方面的问题,但是MongoDB方面有一些选项..
您可以创建一个标签集合,其条目看起来像这样:{_id: ObjectId(), title: "Foo Bar"}
。然后,每个用户都可以拥有他订阅的标签的id值数组:
{ username: ...,
tags: [ObjectId(), ObjectId(), ... ]}
然后,您可以使用$ in运算符检索用户标记的标题:
db.tags.find({_id: { $in: [array from user] }});