MongoTemplate Criteria Query

Aet*_*ros 6 java mongodb spring-data-mongodb mongotemplate

我正在Mongo根据多个参数生成复杂的查询.我想用Criteriahelper类制作的标准之一是:

{"field1": {$exists: true, $ne: false}}
Run Code Online (Sandbox Code Playgroud)

我试着用它来做:

Criteria.where("field1").is(Criteria.where("$ne").is(false).and("$exists").is(true))
Run Code Online (Sandbox Code Playgroud)

但它会产生:

{ "field1" : { $java : org.springframework.data.mongodb.core.query.Criteria@23864e60 } 
Run Code Online (Sandbox Code Playgroud)

那么,如何实现我需要的确切查询? 我无法对该查询字符串进行硬编码,因为这些类型标准是为field1,... fieldN动态生成的,然后与$or:

statusCriteria = statusCriteria.orOperator(criterias.toArray(new Criteria[criterias.size()]));
Run Code Online (Sandbox Code Playgroud)

chr*_*dam 17

由于您无法使用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);
}
Run Code Online (Sandbox Code Playgroud)

  • @Aeteros 根本没有性能问题。根据文档,MongoDB 在指定逗号分隔的表达式列表时提供隐式“AND”操作。当必须在多个表达式中指定相同的字段或运算符时,需要使用显式的“AND”和“$and”运算符。 (2认同)