내장된 몽구스 채우기
저는 Mongoose.js를 사용하며 3단계 계층 문서의 문제를 해결할 수 없습니다.
두 가지 방법이 있습니다.
첫 번째 - 참조 없음.
C = new Schema({
'title': String,
});
B = new Schema({
'title': String,
'c': [C]
});
A = new Schema({
'title': String,
'b': [B]
});
저는 C 기록을 보여줘야 합니다.C의 _id만 알고 어떻게 그것을 채울 수 있습니까?
사용하려고 했습니다.
A.findOne({'b.c._id': req.params.c_id}, function(err, a){
console.log(a);
});
하지만 나는 내가 필요로 하는 물건만 리턴에서 얻는 방법을 모릅니다.
두 번째, 참조로 작업하는 경우:
C = new Schema({
'title': String,
});
B = new Schema({
'title': String,
'c': [{ type: Schema.Types.ObjectId, ref: 'C' }]
});
A = new Schema({
'title': String,
'b': [{ type: Schema.Types.ObjectId, ref: 'B' }]
});
계층 구조를 얻기 위해 모든 B, C 레코드를 채우는 방법은 무엇입니까?
저는 다음과 같은 것을 사용하려고 했습니다.
A
.find({})
.populate('b')
.populate('b.c')
.exec(function(err, a){
a.forEach(function(single_a){
console.log('- ' + single_a.title);
single_a.b.forEach(function(single_b){
console.log('-- ' + single_b.title);
single_b.c.forEach(function(single_c){
console.log('--- ' + single_c.title);
});
});
});
});
그러나 single_c.title에 대해 정의되지 않은 값이 반환됩니다.그걸 채울 방법이 있나요?
감사해요.
Mongoose 3.6부터는 쿼리에 관련 문서를 재귀적으로 채우는 기능이 추가되었습니다.다음은 이 작업을 수행하는 방법에 대한 예입니다.
UserList.findById(listId)
.populate('refUserListItems')
.exec(function(err, doc){
UserListItem.populate(doc.refUserListItems, {path:'refSuggestion'},
function(err, data){
console.log("User List data: %j", doc);
cb(null, doc);
}
);
});
이 경우 'refUserListItems'의 ID 배열을 참조된 문서로 채우고 있습니다.그런 다음 쿼리의 결과는 원래 입력된 문서의 필드인 'refSuggestion'을 참조하는 다른 입력 쿼리로 전달됩니다.
두 번째(내부) 채우기를 기록합니다. 여기서 마법이 발생합니다.그래프를 필요한 방식으로 작성할 때까지 이러한 채우기를 계속 사용하고 점점 더 많은 문서를 고정할 수 있습니다.
이것이 어떻게 작동하는지 이해하는 데는 약간의 시간이 걸리지만, 만약 당신이 그것을 통해 일한다면, 그것은 이치에 맞습니다.
Mongoose 4에서는 이렇게 여러 레벨을 채울 수 있습니다(다른 데이터베이스나 인스턴스에서도).
A
.find({})
.populate({
path: 'b',
model: 'B',
populate: {
path: 'c',
model: 'C'
}
})
.exec(function(err, a){});
Mongoose 4에서는 여러 단계에 걸쳐 문서를 채울 수 있습니다.
사용자의 친구를 추적하는 사용자 스키마가 있다고 가정합니다.
var userSchema = new Schema({
name: String,
friends: [{ type: ObjectId, ref: 'User' }]
});
첫째로populate()
사용자 친구 목록을 가져올 수 있습니다.하지만 만약 여러분이 사용자의 친구들도 원한다면 어떨까요?이 경우 다음을 지정할 수 있습니다.populate
몽구스에게 정보를 입력하도록 지시하는 옵션friends
모든 사용자의 친구 배열:
User.
findOne({ name: 'Val' }).
populate({
path: 'friends',
// Get friends of friends - populate the 'friends' array for every friend
populate: { path: 'friends' }
});
출처: http://mongoosejs.com/docs/populate.html#deep-populate
이것에 늦었지만, 저는 심층 모델 모집단을 수행하는 것을 매우 간단하게 만드는 Mongoose 플러그인을 작성했습니다.예를 들어, 이 작업을 수행하여 다음 항목을 채울 수 있습니다.b
그리고.c
:
A.find({}, function (err, docs) {
A.deepPopulate(docs, 'b.c', cb)
}
다음과 같이 채워지는 각 경로에 대해 Mongoose 채우기 옵션을 지정할 수도 있습니다.
A.deepPopulate(docs, 'b.c', {
b: {
select: 'name'
}
}, cb)
자세한 내용은 플러그인 설명서를 참조하십시오.
언급URL : https://stackoverflow.com/questions/13077609/mongoose-populate-embedded
'programing' 카테고리의 다른 글
패키지를 로드할 때 메시지 사용 안 함 (0) | 2023.07.03 |
---|---|
"gdb가 코드화되었는지 확인하십시오 - 태스크게이트(8) 참조" - 홈브루 코드가 서명된 gdb를 설치하려면 어떻게 해야 합니까? (0) | 2023.07.03 |
MongoDB: 로케일:: facet::_S_create_c_local 이름이 잘못되었습니다. (0) | 2023.06.28 |
java.java.path의 noocijdbc12 (0) | 2023.06.28 |
Firebase Cloud Firestore에 특정 필드가 존재하거나 존재하지 않는 문서를 가져오려면 어떻게 해야 합니까? (0) | 2023.06.28 |