簡體   English   中英

MongoDB Java驅動程序:與sort不同

[英]MongoDB Java driver: distinct with sort

使用MongoDB控制台,我可以使用不同的密鑰編寫本機MongoDB查詢,其類似於:

db.mycollection.distinct('mykey').sort('mykey', 1)

使用Java驅動程序,我希望能夠像這樣編寫相同的查詢:

myCollection.distinct("myKey").sort(new BasicDBObject("myKey", 1));

但是,這不起作用,因為DBCollection#distinct()返回類型List而不是像DBCollection#find()那樣輸入DBCursor

如何使用Java驅動程序編寫帶有排序的不同查詢?

MongoDB不支持使用distinct命令進行服務器端排序。 在控制台中發生的事情是, distinct('myKey')調用返回一個數組,然后你在該數組上調用JavaScript sort方法,該方法返回數組的排序版本。 傳遞給sort的參數將被忽略。

要在Java中執行等效操作,您可以:

List myKeys = myCollection.distinct("myKey");
java.util.Collections.sort(myKeys);

要使用服務器端排序獲取唯一鍵,可以使用aggregate 以下是你在shell中的表現:

db.mycollection.aggregate([
    { $group: {_id: '$myKey' }},
    { $sort: {_id: 1}}
])

但是,當我測試它時,簡單的客戶端排序方法表現得更好。

你實際上可以使用純JavaScript

db.mycollection.distinct('mykey').sort()

或傳遞比較函數以進行更精細的排序:

db.users.distinct('mykey').sort(function(a, b){return a >b})

在robomongo上測試過

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM