MongoTemplate Criteria Query

时间:2015-11-05 14:03:23

标签: java mongodb spring-data-mongodb mongotemplate

我正在根据多个参数生成复杂的val props = new HashMap[String, Any]() props += ("gatling.charting.indicators.lowerBound" -> 5) props += ("gatling.charting.indicators.higherBound" -> 100) GatlingConfiguration.setUp(props) 查询。我想用Mongo助手类制作的标准之一是:

Criteria

我试图用:

{"field1": {$exists: true, $ne: false}}

但它会产生:

Criteria.where("field1").is(Criteria.where("$ne").is(false).and("$exists").is(true))

那么,如何实现我需要的确切查询? 我无法对该查询字符串进行硬编码,因为这些类型标准是为field1,... fieldN动态生成的,然后与{ "field1" : { $java : org.springframework.data.mongodb.core.query.Criteria@23864e60 } 结合使用:

$or

2 个答案:

答案 0 :(得分:15)

由于您无法使用Criteria.and()在同一字段中添加多个条件,请按以下方式使用Criteria.andOperator()

Query query = new Query();
query.addCriteria(
    new Criteria().andOperator(
        Criteria.where("field1").exists(true),
        Criteria.where("field1").ne(false)
    )
);

List<Foo> result = mongoTemplate.find(query, Foo.class);
System.out.println("query - " + query.toString());

for (Foo foo : result) {
    System.out.println("result - " + foo);
}

答案 1 :(得分:0)

Query query = new Query(Criteria.where("field1").exists(true).ne(false));

或者,如果field1在存在时始终为布尔值:

Query query = new Query(Criteria.where("field1").is(true));