2017-01-05 1 views
0

저는 클라이언트의 필터를 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; 
} 
+0

관련 morphia 코드를 게시물에 추가 할 수 있습니까? – Veeram

+0

확실히 약간의 미뉴에 있습니다. –

답변

0

QueryImplsetQueryObject() 내부 구조입니다. 경고없이 변경되거나 사라질 수 있으므로 사용하지 않아야합니다. 공개 쿼리 빌더 API를 사용하여 쿼리 문서를 작성해야합니다.

+0

공개 쿼리 API를 사용하려고했지만 dbobject 쿼리를 setQueryObjext 메서드없이 Morphia 쿼리로 변환하는 방법을 찾지 못했습니다. dbobject를 쿼리 또는 cirteria로 변환하는 방법을 알고 있습니까? 어떻게 해결해야합니까? –

+0

당신은'DBObject'를 사용하여 쿼리를 만들지 않을 것입니다. Morphia API를 직접 사용하십시오. – evanchooly

+0

나는 놀이기구를 사용하고있다. 클라이언트 쪽에서 DBObject로 질의를받습니다. 어떻게 그것으로 morphia API를 사용할 수 있습니까? –

0

동일한 문제가 발생했습니다. 이렇게하면 작동하는 것 같습니다. finalQuery.and(); finalQuery.and (finalQuery.or (finalQuery.criteria ("field"). 동등 (거짓), finalQuery.criteria ("필드"). doesNotExist())); 일종의 추한 및 누군가가 다른 접근 방식을 듣고 싶지만 DBObject 수있는 클라이언트 측에서 데이터를 변환 할 수있는 유일한 방법은 QueryImpl의 setQueryObject() 사용하는 것입니다.