Sql-Server
有什麼方法可以有效地在 MongoDB 中執行等效的 DENSE_RANK ?
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 根本沒有任何類型的功能,因為它根本不是為這種類型的查詢而設計的。