[MONGODB] 몽구스의 채우기가 포함 된
MONGODB몽구스의 채우기가 포함 된
나는 Mongoose.js를 사용하여 3 계층 구조 문서로 문제를 해결할 수 없습니다.
이 그것을 할 수있는 2 가지 방법.
첫째 - 심판없이.
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를 객체를 반환에서 얻을하는 방법을 모르겠어요.
둘째 심판 작업하는 경우 :
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에 대한 정의되지 않은 반환합니다. 나는 그것을 채우는이 방법은?
감사.
해결법
-
==============================
1.몽구스 4에서는 여러 단계에 걸쳐 문서를 채울 수 있습니다 :
몽구스 4에서는 여러 단계에 걸쳐 문서를 채울 수 있습니다 :
당신이 사용자의 친구를 추적 사용자 스키마를 말해봐.
var userSchema = new Schema({ name: String, friends: [{ type: ObjectId, ref: 'User' }] });
첫째로 채우기 ()는 사용자의 친구 목록을 얻을 수 있습니다. 그러나 당신은 또한 친구의 사용자의 친구를 원하는 경우 어떻게? 이 경우에는 모든 사용자의 친구의 친구의 배열을 채울 몽구스를 말할 채우기 옵션을 지정할 수 있습니다 :
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 :에서 촬영
-
==============================
2.몽구스 3.6 쿼리에 재귀 적으로 채우기 관련 문서에있는 기능의 추가되었습니다. 여기 당신이 그것을 할 수있는 방법의 예입니다 :
몽구스 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를'- 쿼리의 결과는 다음 참조 원래 인구가 문서의 필드는 내가 채울 또한 원하는 또 다른 채우기 쿼리에 전달됩니다.
두 번째 (내부) 채우기를 참고 - 마법이 일어나는 곳입니다. 당신이 당신의 그래프 당신이 그것을 필요로하는 방식을 구축 할 때까지 당신은 더 많은 문서에 둥지 이러한 채우고 압정을 계속할 수 있습니다.
그것은이 작동하는 방법을 소화하기 위해 약간의 시간이 걸립니다,하지만 당신은 그것을 통해 작업하는 경우, 그것은 의미가 있습니다.
-
==============================
3.몽구스 4에서이 같은 다단계를 채울 수 있습니다 (심지어 다른 데이터베이스 또는 인스턴스에서)
몽구스 4에서이 같은 다단계를 채울 수 있습니다 (심지어 다른 데이터베이스 또는 인스턴스에서)
A .find({}) .populate({ path: 'b', model: 'B', populate: { path: 'c', model: 'C' } }) .exec(function(err, a){});
-
==============================
4.나는이 늦게 해요,하지만 나는 그것이 매우 간단 깊은 모델 채우기를 수행 할 수 있도록하는 몽구스 플러그인을 썼다. 귀하의 예를 들어, 채우기 b와 c로이 작업을 수행 할 수 있습니다
나는이 늦게 해요,하지만 나는 그것이 매우 간단 깊은 모델 채우기를 수행 할 수 있도록하는 몽구스 플러그인을 썼다. 귀하의 예를 들어, 채우기 b와 c로이 작업을 수행 할 수 있습니다
A.find({}, function (err, docs) { A.deepPopulate(docs, 'b.c', cb) }
또한이 같은 인구 경로, 각 몽구스의 채우기 옵션을 지정할 수 있습니다 :
A.deepPopulate(docs, 'b.c', { b: { select: 'name' } }, cb)
자세한 내용은 플러그인 설명서를 확인하십시오.
from https://stackoverflow.com/questions/13077609/mongoose-populate-embedded by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 조건 MongoDB를 업데이트 (0) | 2019.12.25 |
---|---|
[MONGODB] 몽구스 연결 (0) | 2019.12.25 |
[MONGODB] 노드 - 몽구스 3.6 - 인구 필드 정렬 쿼리 (0) | 2019.12.25 |
[MONGODB] 어떻게 즉시 데이터베이스 / 컬렉션을 만들 MongoDB를 수행 (0) | 2019.12.25 |
[MONGODB] 기록에 날짜 누락 기입 (0) | 2019.12.25 |