Я конвертирую фильтры из клиента в QueryImpl, используя метод setQueryObject. Когда я пытаюсь добавить еще один сложный критерий для этого запроса, мой исходный запрос переносится в поле с именем baseQuery, а новые критерии - это поле запроса. Когда запрос выполняется, используются только новые критерии, а baseQuery не используется. Это происходит только тогда, когда клиентский запрос отформатирован следующим образом: {"$ or": [{"field1": {"$ regex": "value1", "$ options": "i"}}, ...] } , и новые критерии форматируются таким же образом (что означает $ или операция). Кажется, что когда я пытаюсь объединить 2 $ или запросы, это происходит, но когда я объединяю $ или с $, и он правильно связывает запросы. Я использую это неправильно или это настоящая ошибка? Edit: Код:Morphia - Слияние сложного запроса с комплексными критериями
public static List<Entity> getData(client.Query query) {
QueryImpl<Entity> finalQuery = Morphia.realAccess().extractFromQuery(Entity.class,query);
finalQuery.and(finalQuery.or(finalQuery.criteria("field").equal(false), finalQuery.criteria("field").doesNotExist()));
return finalQuery.asList();
}
public <E> QueryImpl<E> extractFromQuery(Class<E> clazz, client.Query query) {
QueryImpl<E> result = new QueryImpl<E>(clazz,this.db.getCollection(clazz),this.db);
result.setQueryObject(query.getFiltersAsDBObject);
return result;
}
Можете ли вы добавить соответствующий код морфии в сообщение? – Veeram
Конечно, будет в нескольких минусах –