我目前正在使用morphia构建我的查询(mongodb),如下所示(用一些小变化重建)
Query<myClass> query = datastore.createQuery(myClass.class).filter("meta",objectID);
List<Criteria> l = new ArrayList<>();
for (loop on different values of min and max) {
Criteria arrayA = query.and(query.criteria("price").greaterThanOrEq(min), query.criteria("price").lessThanOrEq(max)); //max and min are double
l.add(arrayA);
}
query.or(l.toArray(new Criteria[]{}));
解析时的上述查询等同于 -
{"m" : { "$oid" : "56186a51e4b0b33967940961"} , "$or" : [ { "$and" : [ { "p" : { "$gte" : 5000.0}} , { "p" : { "$lte" : 1.0E9}}]}]}
我最近意识到这个查询没有正确使用索引,而是以这种格式使用查询更好
{"m" : { "$oid" : "56186a51e4b0b33967940961"} , "$or" : [ { "$and" : [ { "p" : { "$gte" : 5000.0, "$lte" : 1.0E9}}]}]}
我已经确认使用mongo console
(并解释)第二个查询虽然类似但对大型数据集执行效果更好。但是我无法在morphia中找到等效的代码来构造这个mongo query
。有人可以用正确的语法帮助我,如果可能的话,在morphia中构建这个确切的查询,稍后会提到。或者请建议我使用替代java包装器而不是morphia来提供此功能。
答案 0 :(得分:0)
我不认为这对Morphia来说是可能的 - 你正在寻找一种“介于”之间的方法。
尝试http://jongo.org(基本上是Java中MongoDB shell的包装)或提供解释的输出。也许它可以用另一种方式调整。