2014-10-17 69 views
2

假設我有表(帶有示例數據):隨着RethinkDB,如何實現標籤雲?

story 
{id: 1, name: 'First Story', tags: ['plants', 'flowers']} 
{id: 1, name: 'Second Story', tags: ['flowers', 'wedding']} 

tag 
{id: 'plants'} 
{id: 'flowers'} 
{id: 'weddings'} 

故事表在標籤領域的多指數。

現在我將如何進行查詢所產生的是每個標籤都有(因此它可以被顯示爲標籤雲)故事的量。例如:

{"plants": 1, "flowers": 2, "wedding": 1} 

,也可能是以下格式:

[{id: "plants", count: 1}, {id: "flowers", count: 2}, {id: "wedding", count: 1}] 

而且做一個性能方法,其中有數百個標籤的成千上萬的故事和數百臺將很快完成查詢?

回答

3
r.table("story").indexCreate("tags", {multi: true}).run(...) 
r.table("story").group({index: "tags"}).count().run(...) 

如果你想美化組/計數的結果,你可以做

r.table("story").group({index: "tags"}).count().ungroup().map(function(result) { 
    return r.object(result("group"), result("reduction")) 
}) 
+0

'r.table( 「故事」)組({索引: 「標籤」})。計數()。運行(...)'工作得很好,但一個與地圖導致'無法轉換號碼SEQUENCE'錯誤。 – Chanon 2014-10-19 05:56:13

+0

對不起,我忘了打電話給'ungroup'。我剛剛編輯了查詢,現在應該可以正常工作。 – neumino 2014-10-19 15:26:36

+0

我發現,用一個額外的減少,其結果是更漂亮(單個對象,而不是物體的陣列): 'r.table(「故事」)基團({指數:「標籤」})。COUNT()。取消組合()。圖(功能(結果){ 返回r.object(結果( 「基團」),結果( 「減少」)) })。降低(功能(左,右){返回left.merge(右)})' – Chanon 2014-10-20 14:08:22