2011-12-05 1 views
1

나는이 조직을 가리키는 참조 필드 "O"가 포함 된 사용자 :MongoDB를 - 참조 또는 '외래 키'(Liftweb 스칼라)에 의해 정렬

> db.users.findOne() 
{ 
"o" : ObjectId("4ec3548544ae1b7234548826") 
} 

조직은 필드 "n"을 포함을 :

> db.organisations.findOne() 
{ 
    "n" : "My organization" 
} 

나는 스칼라/리프트를 사용하여 정렬 된 사용자 목록을 원한다.

+1

그건 작동하지 않습니다. 모든 사용자를 선택할 수있는 경우 응용 프로그램 측을 정렬 할 수 있습니다. 그렇지 않은 경우 비정규 화를보고 사용자 레코드에서 조직 이름을 복제 할 수 있습니다. – Thilo

+0

아쉽습니다. 불행합니다. : -/ – Sri

답변

6

효과적으로 당신이 요구하는 것은 JOIN입니다. MongoDB에는 JOIN의 개념이 없습니다.

서버의 관점에서 볼 때 컬렉션은 단순히 서로에 대해 알지 못합니다. 추상적 일부 도구이 멀리 (모르핀 등) 그러나이 만드는 정말 유일한 두 가지 기본 방법이 있습니다 일 :

  1. 수동 조인 후 organizations로드의 users를로드 함께 병합 및 클라이언트 - 가입을 측면.
  2. 비정규 화 : N 필드의 복사본을 users 컬렉션 안에 저장하고 동기화 상태로 유지합니다. 이렇게하면 쿼리가 빠르게 작동하지만 업데이트가 복잡해집니다.

JOIN의 부족은 MongoDB의 기본적인 절충 사항 중 하나입니다. 일반적인 쿼리 또는 필수 쿼리 인 경우 # 1, # 2 또는 # 3을 수행해야합니다. 즉, 다른 DB를 선택하십시오.

+0

또는 # 4 : 정렬없이 응용 프로그램을 작동시키는 방법을 찾으십시오. – Thilo

+3

더 이상 버전 3.2의 경우는 없습니다. https://docs.mongodb.com/master/reference/operator/aggregation/lookup/#pipe._S_lookup – Madbreaks