mongodb中的多对多关系

时间:2012-07-30 19:55:02

标签: ruby mongodb

我正在Ruby(here)中编写一个小型torrent索引器,并且很乐意支持MongoDB作为数据库的选项。目前,我在数据库中设置了tagtorrent之间的多对多关系。

如何格式化从地图表中获取与给定列表中所有标记匹配的所有torrent_id的查询?

我在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并且没有更多。

1 个答案:

答案 0 :(得分:1)

最好创建一个集合来创建包含tag_id和torrent_id的映射。每当您添加torrent时,还要将torrent项标签添加到torrenttags集合中。索引应该在tag_id上。

您可以使用以下查询语法来获取与多个标记匹配的种子列表。

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

对于Aggregation(group by,count),您需要使用MapReduce