使用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}}
])
但是,当我对此进行测试时,简单的客户端排序方法的性能要好得多。