Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Data MongoDB - Criteria API OrOperator is not working properly

I'm facing Spring Data MongoDB Criteria API orOperator problem.

Here's query result for irregular verbs: (Terminal output)

> db.verb.find({'v2':'wrote'});
{ "_id" : ObjectId("5161a8adba8c6390849da453"), "v1" : "write", "v2" : "wrote", "v3" : "written" }

And I query verbs by their v1 or v2 values using Spring Data MongoDB Criteria API:

Criteria criteriaV1 = Criteria.where("v1").is(verb);
Criteria criteriaV2 = Criteria.where("v2").is(verb);
Query query = new Query(criteriaV1.orOperator(criteriaV2));
List<Verb> verbList = mongoTemplate.find(query, Verb.class)

But unfortunately verbList doesn't have any item.

like image 900
talha06 Avatar asked Apr 07 '13 18:04

talha06


2 Answers

As far as I remember in order to use orOperator you should do:

Query query = new Query(new Criteria().orOperator(criteriaV1,criteriaV2));
like image 118
Maciej Walkowiak Avatar answered Oct 23 '22 22:10

Maciej Walkowiak


We need explicitly specify a new criteria with OR condition - try with below example

Criteria criteria = Criteria.where("field1").is(val1).
                .andOperator(new Criteria().orOperator(Criteria.where("field2").is(filterVal),
                        Criteria.where("field3").is(filterVal)));
like image 24
Pravin Bansal Avatar answered Oct 23 '22 20:10

Pravin Bansal