2014-01-30 2 views
0

나는이 문제를 해결하기 위해 머리를 감싸려고 노력해 왔습니다. 다음 그룹의 사용자 및 그룹 컬렉션 문서가 있습니다.Morphia를 사용하여 다른 컬렉션에서 참조 된 mongodb 문서를 가져 오는 중

그룹 문서

{ 
"_id" : ObjectId("52eabc9914cc8d6cc1e6f723"), 
"className" : "org.xxxxxx.sms.core.domain.Group", 
"name" : "CE Play group", 
"description" : "CE Play group", 
"creationdate" : ISODate("2014-01-30T20:56:57.848Z"), 
"user" : DBRef("users", ObjectId("52ea69c714ccd207329b2476")) 
} 
{ 
"_id" : ObjectId("52ea69c714ccd207329b2477"), 
"className" : "org.xxxxxx.sms.core.domain.Group", 
"name" : "Default", 
"description" : "Default sms group", 
"creationdate" : ISODate("2014-01-30T15:03:35.916Z"), 
"user" : DBRef("users", ObjectId("52ea69c714ccd207329b2476")) 
} 

사용자 나 사용자 그룹을 검색하고 일부 조작을 수행하는 클래스에 설정되어있는 모르핀 데이터 저장소 단일 개체가

{ 
"_id" : ObjectId("52ea69c714ccd207329b2476"), 
"className" : "org.xxxxxx.core.domain.User", 
"username" : "jomski2009", 
"firstname" : "Jome", 
"lastname" : "Akpoduado", 
"email" : "[email protected]", 
"active" : true, 
"usergroups" : [ 
    DBRef("groups", ObjectId("52ea69c714ccd207329b2477")), 
    DBRef("groups", ObjectId("52eabc9914cc8d6cc1e6f723")) 
] 
} 

을 문서화합니다. 제공된 사용자 이름 "jomski2009"로 "Default"라는 그룹을 가져오고 싶었는데, Morphia에서 목록으로 사용자 그룹을 가져 오지 않고 내가 원하는 그룹을 찾기 위해 그룹 목록을 반복하지 않고 어떻게 구현합니까?

감사합니다.

답변

1

DBRef는 Mongo에서 클라이언트 측 개념으로 사용됩니다. MongoDB는 조인을하지 않으므로 DBRef의 목적은 필요한 객체를 가져올 위치를 클라이언트에게 넘기는 것입니다. 이것은 다양한 클라이언트 라이브러리에 의해 다른 방식으로 처리됩니다.

응용 프로그램에서 가능하면 참조 유형 대신 Embedded Annotation을 사용하는 것이 좋습니다. 또는 최소한 개체 참조 외에 그룹 개체에 사용자 이름 목록을 포함 시키십시오. 이렇게하면 쿼리에서이를 필터링 할 수 있습니다.

"username"과 같은 고유 식별자를 항상 고유 한 한 _id 필드로 이동하는 것이 좋습니다. 기본 키 조회는 항상 빠릅니다.

+0

Neil에게 고마워. 귀하의 제안은 매우 도움이되었습니다. 사용자 이름 필드를 ID로 사용하고 사용자를 그룹 컬렉션의 DBRef 개체로 추가하는 대신 단순히 사용자 이름을 추가하고 그룹 이름 (함께 고유 한 엔터티를 형성 함)과 결합하여 이제는 특정 그룹을 검색하기위한 산들 바람 . – Jome