java - MongoDB Java 驱动程序 : distinct with sort

使用 MongoDB 控制台,我可以使用不同的键编写原生 MongoDB 查询,排序如下:

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

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

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

但是,这不起作用,因为 DBCollection#distinct() 返回类型 List 而不是类型 DBCursorDBCollection# 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}}
])

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

https://stackoverflow.com/questions/18326345/

相关文章:

node.js - 是否可以将额外的参数传递给 Mongoose 更新回调

node.js - 模型操作的 Sails.js 身份验证

mongodb - 结合 Neo4J 和 MongoDB : Consistency

mongodb - 与 skip() 和 limit() 一起使用的 Distinct() 命令

node.js - NodeJS ExpressJS PassportJS - 仅用于管理页面

php - 为什么这种 mongo 排序在 PHP 中不起作用?

python - 有人知道 pymongo 中 2dsphere 索引的工作示例吗?

php - mongodb:查找列的最高数值

c# - 使用 MongoDB 的 C# 驱动程序进行多字段查询

python - Mongodb复制集自动重新连接在nginx + uwsgi上下运行后无法正常工作