使用 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 驱动程序编写带有排序的不同查询?
最佳答案
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}}
])
但是,当我对此进行测试时,简单的客户端排序方法的性能要好得多。
关于java - MongoDB Java 驱动程序 : distinct with sort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18326345/