0

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

从我读过的关于 mongodb 的设计文章中,我了解到我需要停止以“第四范式”形式思考。我一直在想有一个带有 and 的多对多表和另一个带有tag_idanduser_id的多对多tag_iditem_id。但是从阅读关于 nosql 的内容来看,在每个用户或项目中嵌入标签(作为标签甚至是字符串数组)似乎要好得多。

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

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

4

1 回答 1

0

我无法在 Ruby 方面为您提供帮助,但这里有一些 MongoDB 方面的选项..

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

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

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

db.tags.find({_id: { $in: [array from user] }});
于 2012-05-02T18:39:18.483 回答