2012-07-30 37 views
0

我正在写在Ruby中一个小的洪流索引(here),并希望能支持的MongoDB作为数据库的选项很多关系。目前,我在tag s和torrent s之间建立了多对多关系的数据库。许多人在MongoDB中

如何我会格式化查询,从匹配所有的标签在给定的列表,一个映射表得到所有的torrent_id S'

我这样做是在这样的SQL:

select torrent_id, count(*) num from tagmap where tag_id in (tag1, tag2, tag3, tag4) group by torrent_id having num = 4"

编辑:我现在只收集与torrent_idtag_id工作。这就是它的全部内容。所以我将id映射到id并且更多。

+0

你应该考虑没有一个加入集合,只是把标签直接到您的收藏洪流。 – 2012-07-30 21:12:36

+0

每一个的优点是什么? – tekknolagi 2012-07-30 21:17:33

+0

如果您有加入集合,则需要执行多个查询才能将标记与洪流记录相关联。例如,如果直接在记录中存储标签,则可以在单个查询中搜索具有特定标签的种子。 – 2012-07-30 21:21:22

回答

1

这是更好地创建一个集合创建包含TAG_ID的和torrent_id的映射。每当你添加一个种子时,还要将torrent标签添加到torrenttags集合中。索引应该在tag_id上。

您可以使用下面的查询语法获得匹配多个标签的种子名单。

db.tagmap.find({tag_id:{$in: ['tag1','tag2','tag3','tag4']}});

对于Aggregation(GROUP BY,算),你需要使用MapReduce的

+0

请参阅我的编辑,请 – tekknolagi 2012-07-30 20:06:09

+0

非常感谢!我会让你知道,如果这个工程:) – tekknolagi 2012-07-30 20:17:44

+0

哦,这是相同的Ruby语法?它会作为'$ map.find(:tag => {:$ in => ['tag1','tag2']})'吗? – tekknolagi 2012-07-30 20:19:06