[英]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.