저는 클라이언트의 필터를 setQueryObject 메서드를 사용하여 QueryImpl로 변환하고 있습니다. 해당 쿼리에 다른 복잡한 조건을 추가하려고하면 원래 쿼리가 baseQuery라는 필드로 이동되고 새 조건이 쿼리 필드입니다. 쿼리를 실행하면 새 조건 만 사용되며 baseQuery는 사용되지 않습니다. 클라이언트 쿼리가 { "$ 또는": {{ "field1": { "$ regex": "value1", "$ options": "i"}}, ...} } 과 같은 방식으로 새 기준이 지정됩니다 ($ 또는 연산 의미). 2 $를 병합하려고하거나 쿼리가 발생하지만 $ 또는 $와 병합하면 쿼리가 제대로 연결됩니다. 잘못 사용하고 있거나 진짜 버그입니까? 편집 : 코드 :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;
}
관련 morphia 코드를 게시물에 추가 할 수 있습니까? – Veeram
확실히 약간의 미뉴에 있습니다. –