MongoDB Java驱动程序:与sort不同

时间:2013-08-20 03:06:49

标签: java mongodb sorting distinct

使用MongoDB控制台我可以使用不同的密钥编写本机MongoDB查询,其类似于:

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

使用Java驱动程序,我希望能够像这样编写相同的查询:

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

但是,这不起作用,因为DBCollection#distinct()会返回List类型,而不会像DBCursor那样输入DBCollection#find()

如何使用Java驱动程序编写带有排序的不同查询?

2 个答案:

答案 0 :(得分:13)

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}}
])

然而,当我对此进行测试时,简单的客户端排序方法表现得更好。

答案 1 :(得分:0)

您实际上可以使用纯javascript

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

或传递比较函数以进行更精细的排序:

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

在robomongo上进行了测试