[MONGODB] 중첩 된 배열을 채울 몽구스
MONGODB중첩 된 배열을 채울 몽구스
다음 3 개 모델을 가정 :
var CarSchema = new Schema({
name: {type: String},
partIds: [{type: Schema.Types.ObjectId, ref: 'Part'}],
});
var PartSchema = new Schema({
name: {type: String},
otherIds: [{type: Schema.Types.ObjectId, ref: 'Other'}],
});
var OtherSchema = new Schema({
name: {type: String}
});
내가 차를 쿼리 할 때 나는 부분을 채울 수 있습니다 :
Car.find().populate('partIds').exec(function(err, cars) {
// list of cars with partIds populated
});
중첩 된 부분으로 otherIds을 채울 수 몽구스의 방법은 모든 차를 위해 객체가있다.
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
});
});
아마 반복 처리 각 차량 이상과 채울 시도 할 수 있습니다 :
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
});
});
});
문제는 각 채우기 호출을 반환 모든 작업이 완료 될 때까지 기다려야하고 비동기 같은 lib 디렉토리를 사용하여 가지고있다.
가능한 모든 차에 걸쳐 반복하지 않고 할까?
해결법
-
==============================
1.업데이트 : 아래에 요약 몽구스 4에 추가 된 컴팩트 버전 트린 호앙 Nhu는의 답변을 참조하십시오 :
업데이트 : 아래에 요약 몽구스 4에 추가 된 컴팩트 버전 트린 호앙 Nhu는의 답변을 참조하십시오 :
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. }); });
이 같은 중첩 된 인구를 들어, 몽구스에게 당신이에서 채울하려는 스키마를 말해야한다.
-
==============================
2.몽구스 4 지원이
몽구스 4 지원이
Car .find() .populate({ path: 'partIds', model: 'Part', populate: { path: 'otherIds', model: 'Other' } })
-
==============================
3.사용 몽구스 deepPopulate 플러그인
사용 몽구스 deepPopulate 플러그인
car.find().deepPopulate('partIds.otherIds').exec();
-
==============================
4.그것은 더 나은에 있어야한다입니다
그것은 더 나은에 있어야한다입니다
Car .find() .populate({ path: 'partIds.othersId' })
from https://stackoverflow.com/questions/28179720/mongoose-populate-nested-array by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] dockerized 몽고에 초기화 데이터 (0) | 2019.12.29 |
---|---|
[MONGODB] 어떻게 / 덤프 MongoDB의 데이터베이스를 내보낼 수 있나요? (0) | 2019.12.29 |
[MONGODB] 인덱스를 사용하지 않는 쿼리를 찾거나 MongoDB를 둔화하는 방법 (0) | 2019.12.29 |
[MONGODB] 풀 타임 스탬프가 통합 프레임 워크에 주어 졌을 때 어떻게 날짜를 기준으로 집계하는? (0) | 2019.12.29 |
[MONGODB] 어떻게 데이터의 손실없이 MongoDB에 덮인 모음의 크기를 조정할 수 있습니까? (0) | 2019.12.29 |