Sql-Server

有什麼方法可以有效地在 MongoDB 中執行等效的 DENSE_RANK ?

  • August 24, 2011

SQL Server 和 Oracle 都有 DENSE_RANK 函式。有沒有辦法在 MongoDB 中做類似的事情而不必求助於 MapReduce?換句話說,假設您有一個像這樣的 T-SQL 選擇子句:

SELECT DENSE_RANK() OVER(ORDER BY SomeField DESC) SomeRank

在 MongoDB 中做同樣事情的最佳方法是什麼?

(注意:這是這裡 MongoDB 問題的轉貼。我希望從 DBA 那裡獲得更多回饋……)

MongoDB 沒有任何排名的概念。我能找到的最接近的來自這裡

以下是一些範例數據:

 > db.scoreboard.find()`
 { "_id" : ObjectId("4d99f71450f0ae2165669ea9"), "user" : "dave", "score" : 4 }
 { "_id" : ObjectId("4d99f71b50f0ae2165669eaa"), "user" : "steve", "score" : 5 }`
 { "_id" : ObjectId("4d99f72350f0ae2165669eab"), "user" : "tom", "score" : 3 }

首先,找到使用者“dave”的分數:

 db.scoreboard.find({ user : "dave" }, { score : 1 }) { "_id" : ObjectId("4d99f71450f0ae2165669ea9"), "score" : 4 }

然後,計算有多少使用者得分更高:

 db.scoreboard.find({ score : { $gt : 4 }}).count() 
 1

由於有 1 個更高的分數,因此戴夫的排名為 2(只需將更高分數的計數加 1 即可獲得排名)。

顯然,這遠非理想。但是,MongoDB 根本沒有任何類型的功能,因為它根本不是為這種類型的查詢而設計的。

引用自:https://dba.stackexchange.com/questions/4859