Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoTemplate条件查询_Java_Mongodb_Spring Data Mongodb_Mongotemplate - Fatal编程技术网

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));