2017-03-29 3 views
0

Mongoose에서 populate 메서드를 사용하여 컬렉션을 쿼리하고 싶습니다. 내 출력은 다음과 같이 될 것이다, 그래서 나는 Roles 컬렉션의 멤버 필드에 Member 문서를 채우는 어떻게Mongoose를 사용하여 형제 컬렉션의 필드를 채우는 방법은 무엇입니까?

{ 
    "_id": "58da7bd6e7092e8735646ba0", 
    "name": "Unit Name", 
    "orgs": [ 
     { 
      "name": "Org name", 
      "sortIndex": 0, 
      "_id": "58da7bd6e7092e8735646c2d", 
      "roles": [ 
       { 
        "name": "Role Name", 
        "sortIndex": 0, 
        "member": "58dbd1e6c9a893a7840472ad" 
       } 
      ] 
     } 
    ], 
    "members": [ 
     { 
      "name": { 
       "first": "First Name", 
       "last": "Last Name" 
      }, 
      "_id": "58dbd1e6c9a893a7840472ad" 
     } 
    ] 
} 

: 여기

var UnitSchema = new Schema({ 
    name: { 
     type: String, 
     required: true 
    }, 
    unitNumber: Number, 
    members: [MemberSchema], 
    orgs: [OrgSchema] 
}); 

var MemberSchema = new mongoose.Schema({ 
    name: { 
     first: String, 
     last: String 
    }, 
    phone: String, 
    email: String 
}); 

var OrgSchema = new mongoose.Schema({ 
    name: { 
     type: String, 
     required: true 
    }, 
    sortIndex: Number, 
    roles: [RoleSchema] 
}); 

var RoleSchema = new mongoose.Schema({ 
    name: String, 
    sortIndex: Number, 
    member: { 
     type: Schema.Types.ObjectId, 
     ref: 'Member' 
    } 
}); 

샘플 Unit 모음입니다 : 여기 내 스키마입니다

: 여기
[ 
    { 
     "name": "Org name", 
     "sortIndex": 0, 
     "_id": "58da7bd6e7092e8735646c2d", 
     "roles": [ 
      { 
       "name": "Role Name", 
       "sortIndex": 0, 
       "member": { 
        "name": { 
         "first": "First Name", 
         "last": "Last Name" 
        }, 
        "_id": "58dbd1e6c9a893a7840472ad" 
       } 
      } 
     ] 
    } 
] 

쿼리 나는 생각했다한다

Unit.findOne({unitNumber: unitNumber}).populate('roles.callings.member').exec(...) 

답변

1

여기 있습니다!

unit.findOne({unitNumber: 543}) 
.populate('orgs') 
.exec(function(err, unitDoc){ 
    var subDoc = unitDoc.orgs; 
    for(var org of subDoc){ 
     org.populate('roles', function(err, data){ 
      var rolesDoc = data.roles; 
      for(var role of rolesDoc){ 
       role.populate('member', function(err, rdata){ 
        console.log(JSON.stringify(unitDoc)); 
       }) 
      } 
     }) 
    } 
}) 

위에서 설명한대로 각 하위 문서를 채워야합니다.