我使用吗啡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);
但是,在这种情况下,该列表是空的,到哪里都是我的假设错了吗?
UPDATE
通过使用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项!
真正让我困惑的是,如果我使用的.distinct .find而不是相同的查询工作:
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
为什么是它使用不同的方法调用,当过滤器不起作用?