使用MongoDB控制台,我可以使用像这样的独特键来编写 native MongoDB查询:

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

使用Java驱动程序,我希望能够编写如下相同的查询:
myCollection.distinct("myKey").sort(new BasicDBObject("myKey", 1));

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

如何使用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}}
])

但是,当我对此进行测试时,简单的客户端排序方法的性能要好得多。

10-08 15:20