使用查询生成器在mongodb中进行动态查询

时间:2014-03-14 06:42:05

标签: spring mongodb spring-data spring-mongo

我有一个搜索表单用于在我的网络应用程序中搜索房屋。表格包含以下字段,

private String type;
private Long minPrice;
private Long maxPrice;
private Integer minBedRooms;

当使用在所有字段中输入数据时,此表单用于搜索房屋。例如,用户分别在所有字段中输入数据"Rent 200 5000 2"。我对此的疑问是

Query query = new Query(where("type")
            .is(form.getType())
            .and("bedrooms")
            .is(form.getMinBedRooms())
            .andOperator(where("price").lte(form.getMaxPrice()),
                    where("price").gte(form.getMinPrice())));

现在,当我将上述某个字段留空时,会返回0个结果。例如,当maxPrice为null时,它会返回0个结果。我的问题是我应该如何编写上面的查询,以便它可以设置空值。例如,我将maxPriceminBedRooms字段留空,它将根据typeminPrice

搜索数据

我使用spring 4.和spring数据与mongoDB

我已经坚持了两天,我将非常感谢任何帮助。 的问候,

1 个答案:

答案 0 :(得分:2)

以下是等效的,但在其周围添加逻辑测试

  Query query = new Query();

  if (form.getType() != null) {
      query.addCriteria(Criteria.where("type")
        .is(form.getType());
  }

  if (form.getMinBedrooms() != 0) {
        query.addCriteira(Criteria.where("bedrooms")
        .is(form.getMinBedRooms())
  }

等等。所以只需使用Query对象并添加条件。