2015-01-09 3 views
0

나는 2 개의 모음집을 가지고 있습니다.MongoDb에서 뒤로 검색

컬렉션 "사용자"

{ 
     "_id" : ObjectId("54b00098e0fdb6634b1f54e6"), 
     "state" : "active", 
     "backends" : [ 
       DBRef("backends", ObjectId("54b001ebe0fd853df1c93419")), 
       DBRef("backends", ObjectId("54b00284e0fd853df1c9341b")) 
     ] 
} 

컬렉션 "백엔드"는

{ 
     "_id" : ObjectId("54b001ebe0fd853df1c93419"), 
     "state" : "running" 
} 

나는 백엔드의 상태가 "실행"하는 사용자의 백엔드의 목록을 얻을 싶어요. mongodb가 두 테이블을 결합하는 것과 같이 어떻게 할 수 있습니까? 백엔드에서 뒤로 검색하거나 필터를 사용하는 방법이 있습니까?

나는이

db.users.find({"backends.$id" : "distring"}) 

처럼 검색 할 수 있습니다하지만 백엔드 객체의 내부 상태를 검색하기 위해 무엇을해야할까요? 처럼.

db.users.find({"backends.$state" : "running"}) 

그러나 작동하지 않습니다.

답변

0

MongoDB는 조인을 지원하지 않으므로 두 단계로 수행해야합니다. 쉘에서 :

var ids = db.backends.find({state: 'running'}, {_id: 1}).map(function(backend) { 
    return backend._id; 
}); 

var users = db.users.find({'backends.$id': {$in: ids}}).toArray(); 

보조 노트에, 당신은 그 배열의 ID를 실제로 여러 컬렉션에 문서를 참조 할 수있는 경우를 제외하고는 backends 배열 요소에 대한 일반 ObjectId 대신 DBRef (A)의를 사용하여 아마 더 낫다.

관련 문제