Java MongoTemplate条件查询
我正在根据多个参数生成一个复杂的Java MongoTemplate条件查询,java,mongodb,spring-data-mongodb,mongotemplate,Java,Mongodb,Spring Data Mongodb,Mongotemplate,我正在根据多个参数生成一个复杂的Mongo查询。我想用Criteriahelper类制定的一个标准是: {"field1": {$exists: true, $ne: false}} 我试着用: Criteria.where("field1").is(Criteria.where("$ne").is(false).and("$exists").is(true)) 但它产生了: { "field1" : { $java : org.springframework.data.mongodb.co
Mongo
查询。我想用Criteria
helper类制定的一个标准是:
{"field1": {$exists: true, $ne: false}}
我试着用:
Criteria.where("field1").is(Criteria.where("$ne").is(false).and("$exists").is(true))
但它产生了:
{ "field1" : { $java : org.springframework.data.mongodb.core.query.Criteria@23864e60 }
那么,如何实现我需要的精确查询?
我无法硬编码该查询字符串,因为这些类型标准是为field1、…fieldN动态生成的,然后与$或组合:
statusCriteria = statusCriteria.orOperator(criterias.toArray(new Criteria[criterias.size()]));
由于无法使用将多个条件添加到同一字段中,请按如下方式使用:
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);
}
Query Query=new Query();
query.addCriteria(
新条件().andOperator(
标准。如果(“字段1”)存在(正确),
标准。其中(“字段1”).ne(错误)
)
);
List result=mongoTemplate.find(查询,Foo.class);
System.out.println(“query-”+query.toString());
for(Foo-Foo:result){
System.out.println(“结果-”+foo);
}
或者,如果字段1在出现时始终是布尔值:
Query query = new Query(Criteria.where("field1").is(true));
这将生成以下块{“$和”:[{“字段”:{“$exists”:true},{“field”:{“$ne”:false}]},这并不完全是我需要的,但在逻辑上是这样的。它不会因为加倍“字段”而导致性能问题吗?@Aeteros根本没有性能问题。从中,MongoDB在指定以逗号分隔的表达式列表时提供隐式的和操作。当必须在多个表达式中指定同一字段或运算符时,必须使用带有$和运算符的显式和。@chridam-非常感谢。你的解决方案非常有效。Gr8工作!!
Query query = new Query(Criteria.where("field1").is(true));