Spring Data MongoDB - Criteria API OrOperator не работает должным образом

Я столкнулся с проблемой Spring Data MongoDB Criteria API orOperator.

Вот результат запроса для неправильных глаголов: (Вывод терминала)

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

И я запрашиваю глаголы по их значениям v1 или v2, используя 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)

Но, к сожалению, у verbList нет ни одного предмета.


person talha06    schedule 07.04.2013    source источник


Ответы (2)


Насколько я помню, чтобы использовать orOperator, вы должны сделать:

Query query = new Query(new Criteria().orOperator(criteriaV1,criteriaV2));
person Maciej Walkowiak    schedule 07.04.2013
comment
Спасибо за вашу помощь; после проверки журналов приложений я вижу, что первый параметр используется как критерий AND. Таким образом, решение заключается в использовании нового экземпляра Criteria, как вы написали, или добавлении всегда истинного условия. - person talha06; 08.04.2013
comment
Как мы можем использовать несколько orOperator для поиска по нескольким критериям? - person ; 02.11.2015
comment
операторные методы принимают любое количество параметров - person Tomasz; 29.05.2018

Нам нужно явно указать новый критерий с условием ИЛИ - попробуйте с примером ниже

Criteria criteria = Criteria.where("field1").is(val1).
                .andOperator(new Criteria().orOperator(Criteria.where("field2").is(filterVal),
                        Criteria.where("field3").is(filterVal)));
person Pravin Bansal    schedule 02.08.2019