2012-07-30 79 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