0

私は Ruby で小さな torrent インデクサーを作成しており ( here )、データベースのオプションとして MongoDB をサポートしたいと考えています。tag現在、 s とs の間の多対多の関係でデータベースをセットアップしています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にマッピングしていますが、それ以上のものはありません。

4

1 に答える 1

1

コレクションを作成して、tag_idとtorrent_idで構成されるマッピングを作成することをお勧めします。トレントを追加するときはいつでも、トレントタグをtorrenttagsコレクションに追加してください。インデックスはtag_idにある必要があります。

次のクエリ構文を使用して、複数のタグに一致するトレントのリストを取得できます。

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

Aggregation (group by、count)の場合、MapReduceを使用する必要があります

于 2012-07-30T19:58:51.150 に答える