2016-08-10 63 views
0

我正嘗試使用MongoDBpymongo構建排行榜類型的應用程序,並且該集合的設置非常簡單,只需按整數值排序即可。這使得使用sortlimit來計算頂部和底部用戶相當無足輕重。在已排序的Mongo集合中查找文檔的位置

我的問題是如果我想搜索一個位於集合中間的用戶。我將如何創建一個能夠確定用戶在有序集合中的位置的查詢?

使用該數據集例如:

{user: 'A', value: 20} 
{user: 'B', value: 10} 
{user: 'C', value: 5} 
{user: 'D', value: 4} 
{user: 'E', value: 1} 

我將如何構建一個給定的,我們正在尋找{user: 'C'}查詢它不僅返回用戶文件,也是用戶是3日在有序列表?

下一個問題是我有這個,我怎麼也確定用戶BD在周圍的用戶?

我已經知道如何將整個列表拉到我的應用程序中,並通過它快速搜索,但這似乎是對這個問題的錯誤/昂貴的答案。

回答

1

可能爲此想到的最好方法是運行2個查詢。第一個查詢將獲得當前用戶的值。然後使用該值從該查詢中減去/添加一些常數值,以使用$gt和$ lt``派生具有接近值的用戶範圍。

有一個棘手的問題,那就是該範圍內可能沒有任何值,因此如果發生這種情況,您可能需要對此進行解釋並可能運行其他查詢。

但這實際上並沒有給你排名,這是你要求的。如果這些值(我假設這些分數是相對有限的)相對有限,那麼您可以存儲一個或多個具有單獨分數值的文檔,您可以使用這些值來知道相鄰範圍是什麼。這裏有一個blog post提出了一個類似的想法。

不得不通過一個大集合來讀取位置將是低效的,可能不被大型n接受。但取決於問題的範圍/規模,這可能是可以接受的和最簡單的選擇。

+0

多個文件將是可能的......對於定期運行的某種清理工作,如果天真方法證明過於昂貴,我會記住這一點。 – EEP

相關問題