2011-05-24 197 views
1

所以我有一個情況我使用數組標記文件,如:如何獲取MongoDB中的子數組的最小/最大值?

tags: [ 
    'Housing' : 10, 
    'Retail' : 1, 
    'Stocks' : 25, 
] 

我只是節省了標籤本身,但最近增加的數字,因爲我需要知道排名/位置。因此,標籤旁邊的數字代表用該標籤標記的文檔集合中文檔的排名。

它變得棘手的幾個地方,但現在我只是想弄清楚我如何添加其他文件與一個或多個這些標籤。假設我創建一個新文檔並將其標記爲「房屋」。它的等級需要設置爲11,但我怎麼知道這一點?

唯一的解決辦法,我已經能夠到目前爲止發現是做的map/reduce要經過的記錄,並找到最大值爲標記,添加一個和保存。現在,大多數記錄可能只有2-3個標籤,但理論上可能有10-15個。無論哪種方式,似乎地圖/減少將需要一個強大的努力,一旦有大量的標籤和大量的記錄...

有沒有更簡單的方法,或者我應該開始尋找另一種解決方案來解決這個問題?

編輯:

讓我給你約我試圖解決...我在幻燈片/輪播顯示圖像的問題,更詳細一點。該幻燈片涵蓋了不同的類別,因此使用上面的類別/標籤,您可以查看所有圖像,或僅查看來自住房,零售,股票等的圖像。目前,我只有少數幾個已定義的類別,但它相當這些可能會隨着時間的推移而擴大。他們需要通過標籤過濾,並按日期排序(最新的第一個)。

現在,直到這一點我一直在這樣做。當我想在卡組中間選擇任意圖像時,問題就出現了。假設你想加載6個月前上傳的「housing_chart.gif」。我不想加載6個月的圖像以獲得該圖像(這基本上是我現在所做的)。相反,我想加載該特定圖像,然後能夠爲下一個/上一個圖像分頁。

但爲了在轉盤上,以「分頁」的圖片,我必須知道的結果圖像的位置......沒有實際得到的所有結果和計數。所以我認爲在他們身上放上一個等級就是要走的路,但也會導致其他問題。我不太喜歡創建另一個集合來存儲行列的想法,但這可能是實現它的最有效的方式。

回答

2

你需要什麼的排名?這是否更新?如果不是,並且排名一直在增加,您不能僅僅根據日期對特定標籤的文檔進行排序嗎?

我認爲關於秩的信息確實屬於「標籤」,而不是文件,即。每個標籤都應該有一個與該標籤相關聯的文檔列表 - 該列表中的位置可以定義該列表。

+0

是的,通過這個標籤文檔,您可以輕鬆找到等級編號。如果你真的需要非規範化並在「主文檔」中包含標籤和等級編號,則可以像這樣添加它,不需要大的搜索。 – oma 2011-05-25 14:59:23

+0

得到所有健談,並添加一些更多的背景,我想在這裏解決上述問題的問題。謝謝! – 2011-05-26 15:27:35

相關問題