2015-09-21 114 views
1

我有用戶的集合用戶相對排行榜,每個用戶都有一個點的屬性(見下文模式)。查詢與MongoDB的

我的最終目標是根據一個特定的用戶位置返回有限文件的排序後的數組,或者換句話說,排行榜相對爲特定用戶位置的一小部分。

目前我查詢和排序的所有用戶,找到返回數組中我希望用戶,並根據該切片陣列。我想知道是否有一個查詢可以讓我返回所有用戶。

樣品用戶模式:

/* 1 */ 
{ 
    "_id" : ObjectId("..."), 
    "points" : 5852 , 
    "key" : "user1" 
} 

/* 2 */ 
{ 
    "_id" : ObjectId("..."), 
    "points" : 3835, 
    "key" : "user2" 
} 

/* 3 */ 
{ 
    "_id" : ObjectId("..."), 
    "points" : 1984, 
    "key" : "user3" 
} 

/* 4 */ 
{ 
    "_id" : ObjectId("...."), 
    "points" : 2437, 
    "key" : "user4" 
} 

讓我們假設我想查詢返回由點分類3個文件 - 「USER4」(我的親戚用戶),在領先後,他的文檔的文檔(在上面的例子中「用戶3」)和他之前1號文件(在上面的例子中「用戶2」)

謝謝!

編輯:即時通訊使用貓鼬以及如果這簡化了事情。

EDIT2:請看到預期的輸出如下 -

/* 1 */ 
    { 
     "_id" : ObjectId("..."), 
     "points" : 3835, 
     "key" : "user2" 
    } 
/* 2 */ 
    { 
     "_id" : ObjectId("...."), 
     "points" : 2437, 
     "key" : "user4" 
    } 
/* 3 */ 
    { 
     "_id" : ObjectId("..."), 
     "points" : 1984, 
     "key" : "user3" 
    } 

注意,作爲查詢請求1個用戶上面排和1個用戶排在「USER4」「USER1」沒有出現在輸出

+0

'USER4,用戶3,用戶2'?這不是按「分」排序 – styvane

+0

它對您的預期輸出很困惑。你能否添加有問題的預期輸出? – Vishwas

+0

@Vishwas,感謝您的反饋。我已經添加了預期的輸出。 –

回答

2

聽起來你試圖做到這一點:rank leaderboard in mongo with surrounding players

正如在回答這個問題,這樣做是有三個查詢的最簡單的方式說。即使這增加了查詢的數量,您傳輸的數據也會大大減少。

+0

感謝您的回答!由於鏈接的帖子是3歲,我認爲它值得詢問是否有更好的方法來做到這一點(一個查詢將是最佳的)。另外,爲什麼上述解決方案比我的解決方案更好? (根據用戶位置返回所有用戶排序和切片)。 –

+0

通常,處理數據(即在服務器上)而不是全部傳輸到客戶端並在那裏處理數據會更好,因爲它減少了需要傳輸的數據量。另外,服務器(在這種情況下,Mongo)可能已經過很多優化來處理數據並進行查詢,所以使用它是有意義的! –