2015-01-27 7 views
15

을 채울 모든 자동차의 중첩 된 부품 객체.몽구스 다음의 3 개 모델을 가정하면 중첩 된 배열

Car.find().populate('partIds').exec(function(err, cars) { 
    // list of cars with partIds populated 
    // Try an populate nested 
    Part.populate(cars, {path: 'partIds.otherIds'}, function(err, cars) { 
    // This does not populate all the otherIds within each part for each car 
    }); 
}); 
아마 각 차량을 반복하고 채울 시도 할 수 있습니다

:

나는 각각 채우기 통화를하고 모두가 때까지 기다리는 비동기 같은 lib 디렉토리를 사용한다는 것을이
Car.find().populate('partIds').exec(function(err, cars) { 
    // list of cars with partIds populated 

    // Iterate all cars 
    cars.forEach(function(car) { 
    Part.populate(car, {path: 'partIds.otherIds'}, function(err, cars) { 
     // This does not populate all the otherIds within each part for each car 
    }); 
    }); 
}); 

문제 완료하고 돌아 오십시오.

모든 차량을 루핑하지 않고도 할 수 있습니까?

+0

이 채우기 방법은 정확한 당신의 GET/포스트 노선의 내부에 발생? – Winnemucca

답변

29

업데이트 : 아래

Car 
    .find() 
    .populate({ 
    path: 'partIds', 
    model: 'Part', 
    populate: { 
     path: 'otherIds', 
     model: 'Other' 
    } 
    }) 

몽구스 3 :

Car 
    .find() 
    .populate('partIds') 
    .exec(function(err, docs) { 
    if(err) return callback(err); 
    Car.populate(docs, { 
     path: 'partIds.otherIds', 
     model: 'Other' 
    }, 
    function(err, cars) { 
     if(err) return callback(err); 
     console.log(cars); // This object should now be populated accordingly. 
    }); 
    }); 

아래에 요약 몽구스 4에 추가 된 컴팩트 버전 Trinh Hoang Nhu's answer를 참조하십시오 이와 같이 중첩 된 인구의 경우, 몽구스에게 당신이 원하는 스키마를 말해야합니다. 늦게까지.

+0

쓰레기 RTFM;) 나는 그것을 지금 본다. 그러나 내가 무엇을하려고해도 나는 otherIds를위한 빈 배열을 돌려 준다. 온전한 체크로서 populate 메소드를 호출하지 않으면 id의 배열이있다. 채우기가 해당 ID를 채우지 않습니다. Running 3.8.22 npm – lostintranslation

+0

에서 마지막으로 로깅을 켭니다. 나는 'join'을 채우기 위해 다른 콜렉션에 대한 다른 호출을 보지 못합니다. 그래서 몽구스도 전화를하지 않습니다. – lostintranslation

+2

@lostintranslation 중첩 된'populate' 호출에서'model : 'Other''이어야합니다. – JohnnyHK

21

몽구스 4 지원이

Car 
.find() 
.populate({ 
    path: 'partIds', 
    model: 'Part', 
    populate: { 
    path: 'otherIds', 
    model: 'Other' 
    } 
}) 
+2

참고 : 모델 : '기타'가 필요합니다. 그것 없이는 빈 배열을 얻는다. 문서 도구는 문서를 지정하지 않습니다. http://mongoosejs.com/docs/populate.html#deep-populate –