我正在Ruby(here)中编写一个小型torrent索引器,并且很乐意支持MongoDB作为数据库的选项。目前,我在数据库中设置了tag
和torrent
之间的多对多关系。
如何格式化从地图表中获取与给定列表中所有标记匹配的所有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_id
和tag_id
的集合。这就是它的全部内容。所以我将id映射到id并且没有更多。
答案 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