使用morphia

时间:2015-10-10 17:14:17

标签: java mongodb morphia

我目前正在使用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来提供此功能。

1 个答案:

答案 0 :(得分:0)

我不认为这对Morphia来说是可能的 - 你正在寻找一种“介于”之间的方法。

尝试http://jongo.org(基本上是Java中MongoDB shell的包装)或提供解释的输出。也许它可以用另一种方式调整。