MongoTemplate, как добавить более двух «orOperator» в запрос - PullRequest
0 голосов
/ 18 июня 2020

Мне нужно выполнить запрос в MongoDB, который содержит сразу 4 логических «или», я имею в виду что-то вроде ((a == null || a == 0) || (b == null || b == 0))

Я пытаюсь выполнить этот запрос, но улавливаю исключение Caused by: org.springframework.data.mongodb.InvalidMongoDbApiUsageException: Due to limitations of the com.mongodb.BasicDocument, you can't add a second 'null' criteria. Query already contains '{ "$or" : [{ "a" : null}, { "a" : 0.0}]}'

Вот мой код:

    Criteria aCriteria = new Criteria();
    aCriteria.orOperator(Criteria.where("a").is(null), Criteria.where("a").is(0.0d));
    Criteria bCriteria = new Criteria();
    bCriteria.orOperator(Criteria.where("b").is(null), Criteria.where("b").is(0.0d));

    Query query = new Query();
    query.addCriteria(aCriteria);
    query.addCriteria(bCriteria);
    List<POJO> arbitrages = mongoTemplate.find(query, POJO.class, "DB");

Как решить эту проблему?

1 Ответ

1 голос
/ 18 июня 2020

Следующий запрос Criteria будет работать с orOperator:

Criteria c = new Criteria().orOperator(
                              Criteria.where("a").is(0),
                              Criteria.where("a").is(null),
                              Criteria.where("b").is(0),
                              Criteria.where("b").is(null)
);

Query query = new Query(c);
List<POJO> result = mongoTemplate.find(query, POJO.class, "DB");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...