talha06
talha06

Reputation: 6466

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.

Upvotes: 28

Views: 22834

Answers (2)

Pravin Bansal
Pravin Bansal

Reputation: 4691

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

Upvotes: 5

Maciej Walkowiak
Maciej Walkowiak

Reputation: 12932

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

Query query = new Query(new Criteria().orOperator(criteriaV1,criteriaV2));

Upvotes: 65

Related Questions