Java 查询MongoDB中的有序不同值

Java 查询MongoDB中的有序不同值,java,mongodb,morphia,database,nosql,Java,Mongodb,Morphia,Database,Nosql,我使用Morphia Java驱动程序查询包含以下表单集合的MongoDB: MyCollection { TypeA TypeB } 我想使用以下代码检索TypeB的所有不同值: DBCollection myCol = getDatastore().getCollection(MyCollection.class); List typeBs = myCol.distinct("TypeB"); 上面的代码按预期工作,但不同值的列表当然没有排序 我已经尝试了以下代码: DBCo

我使用Morphia Java驱动程序查询包含以下表单集合的MongoDB:

MyCollection {
   TypeA
   TypeB
}
我想使用以下代码检索TypeB的所有不同值:

DBCollection myCol = getDatastore().getCollection(MyCollection.class);
List typeBs = myCol.distinct("TypeB");
上面的代码按预期工作,但不同值的列表当然没有排序

我已经尝试了以下代码:

DBCollection myCol = getDatastore().getCollection(MyCollection.class);
DBObject orderBy = new BasicDBObject("$orderby", new BasicDBObject("TypeB", 1);
List typeBs = myCol.distinct("TypeB", orderBy);
但在这种情况下,列表是空的,我的假设哪里错了

更新

通过使用CLI,我发现以下查询返回了预期结果:

> db.mycollection.find({$query : {}, $orderby : { TypeB : 1 }})
因此,我相应地调整了代码:

DBCollection myCol = getDatastore().getCollection(MyCollection.class);

BasicDBObject ascending = new BasicDBObject("TypeB", 1);
BasicDBObject filter = new BasicDBObject();
filter.put("$query", new BasicDBObject());
filter.put("$orderby", ascending);

List typeBs = myCol.distinct("TypeB", filter);
静态结果包含0个条目

真正让我困惑的是,如果我使用.find而不是.distinct,那么同一个查询也可以工作:

DBCollection myCol = getDatastore().getCollection(MyCollection.class);

BasicDBObject ascending = new BasicDBObject("TypeB", 1);
BasicDBObject filter = new BasicDBObject();
filter.put("$query", new BasicDBObject());
filter.put("$orderby", ascending);

myCol.find(filter).hasNext();  <-- Evaluates to TRUE
DBCollection mycl=getDatastore().getCollection(MyCollection.class);
BasicDBObject升序=新的BasicDBObject(“类型B”,1);
BasicDBObject过滤器=新的BasicDBObject();
put(“$query”,新的BasicDBObject());
filter.put(“$orderby”,升序);

myCol.find(filter.hasNext() DBCollection.distinct()的第二个DBObject参数是一个查询对象,用于定义匹配条件。要对列表区域进行排序,可以使用:

List typeBs = myCol.distinct("TypeB");
java.util.Collections.sort(typeBs);

是的,这是我目前正在使用的解决方法。但是我相信我应该能够添加一个查询,在提取不同的值之前对结果进行排序。如果您希望在mongodb级别进行排序,以防执行限制操作,该怎么办