2012-01-13 2 views
3

네이티브 Java 드라이버 (타사 라이브러리/ORM 없음)와 함께 Mongo를 사용합니다. 나는 두 개의 "ReleaseDetailsByTerritory"항목을 갖는 "릴리스"항목을 검색하고, 그 두 ReleaseDetailsByTerritory 클래스 인스턴스의 목록을 포함하는 릴리스 클래스 인스턴스에 자동 통해 인스턴스 갖고 싶어Mongo ReflectionDBObject, 모든 임베디드 배열 요소를 클래스에 매핑합니다.

public class Release extends ReflectionDBObject { 

    //other fields omitted  

    private List<ReleaseDetailsByTerritory> releaseDetailsByTerritory = new ArrayList<ReleaseDetailsByTerritory>(); 

} 

public class ReleaseDetailsByTerritory extends ReflectionDBObject { //...} 

, 내가 가진 :이 있습니다 이렇게하려면 :

releaseColl.setObjectClass(Release.class); 
releaseColl.setInternalClass("ReleaseDetailsByTerritory.0", ReleaseDetailsByTerritory.class); 
releaseColl.setInternalClass("ReleaseDetailsByTerritory.1", ReleaseDetailsByTerritory.class); 
Release r = (Release) releaseColl.findOne(); 

즉 임베디드 어레이의 각 잠재적 요소를 해당 클래스에 구체적으로 매핑해야합니다.

Mongo 드라이버에게 임베디드 배열의 모든 요소를 ​​특정 클래스에 매핑되도록하고 싶습니다. 예 :

collection.setInternalClass("ReleaseDetailsByTerritory.*", ReleaseDetailsByTerritory.class); 

?

감사합니다. 그리고 "Spring MondoDb 모듈 또는 Morphia 사용"이라고 말하지 마십시오. 이것이 Mongo 네이티브 Java 드라이버로 달성 가능한지 알고 싶습니다.

+0

소스 코드를보고 이것이 가능하다고 생각하지 않습니다. 나는 "ReleaseDetailsByTerritory"를 전달하려고 시도했다고 가정합니까? 그래서 .0 또는. *는 없습니다. –

+0

네, "ReleaseDetailsByTerritory"를 전달하려고 시도했지만 작동하지 않습니다. 나는 당신이 옳다고 생각합니다. 나는 단지 근원을 보았습니다. 그리고 그것이 전부입니다. 당신이 대답에 당신의 코멘트를하고 싶다면 나는 그것을 "선택된 대답"으로 만들 것입니다. 그렇지 않다면 나는이 (2 일 후)에 직접 대답 할 것이다. –

답변

2

소스 코드를 보면 이것이 가능하지 않다고 생각합니다. 또한 필요한 기능을위한 편리한 기능을 만드는 확실한 방법이 없습니다. 각 배열 요소에 대해 setInternalClass를 호출해야한다는 것은 대용량의 메모리 사용량을 고려할 때 큰 배열에 대해 발생하는 옵션 일 가능성이 거의 없습니다.

Morphia와 같은 전체 매핑 솔루션을 사용하지 않고도 필요한 작업을 수행하는 "문서"클래스의 구현을 고려해 볼 수 있습니다. 실제로는 Spring보다 더 우아합니다. .

jira.mongodb.org에서 JIRA 문제를 열어이 기능을 요청할 수도 있습니다.