在Morphia查询Mongo数据库中有条件多个过滤器

时间:2016-03-08 10:17:49

标签: mongodb mongodb-java morphia mongo-java-driver database

环境:MongoDb 3.2,Morphia 1.1.0

因此,假设我有一个Employees和Employee实体的集合有几个字段。我需要做一些事情,例如应用多个过滤器(有条件的),并为每个请求返回一批10条记录。

pesudocode如下。

@Entity("Employee")
Employee{
 String firstname,
 String lastName,
 int salary,
 int deptCode,
 String nationality
}

并在我的EmployeeFilterRequest中将请求参数带到dao

EmployeeFilterRequest{
 int salaryLessThen
 int deptCode,
 String nationality..
}

伪类

class EmployeeDao{

public List<Employee> returnList;

public getFilteredResponse(EmployeeFilterRequest request){
   DataStore ds = getTheDatastore();

   Query<Employee> query = ds.createQuery(Emploee.class).disableValidation();

   //conditional request #1
   if(request.filterBySalary){
     query.filter("salary >", request.salary);
   }

   //conditional request #2
   if(request.filterBydeptCode){
     query.filter("deptCode ==", request.deptCode);
   }

   //conditional request #3
   if(request.filterByNationality){
     query.filter("nationality ==", request.nationality);
   }

   returnList = query.batchSize(10).asList();

/******* **THIS IS RETURNING ME ALL THE RECORDS IN THE COLLECTION, EXPECTED ONLY 10** *****/
 }
}

如上面代码中所解释的那样..我想对多个字段执行条件过滤。即使batchSize存在为10,我也会在集合中获得完整的记录。

如何解决这个???

此致 Punith

1 个答案:

答案 0 :(得分:1)

布雷克是对的。您想使用limit()而不是batchSize()。批量大小仅影响每次访问服务器的文档数量。这在拉动大量非常大的文档时非常有用,但它不会影响查询提取的文档总数。

作为旁注,您应该小心使用asList()因为它将从查询返回的每个文档中创建对象,并且可能耗尽VM的堆。使用fetch()可以让您在需要时逐步补充文档。你可能实际上需要它们作为一个列表,大小为10,这可能很好。在处理其他查询时,请记住这一点。