2015-07-28 3 views
0

Я недавно начал использовать mongoose-deep-populatenpm пакет для вложенного заполнения в моем проекте. Мой проект предполагает, что я разрешаю только school Admin вставлять данные учащихся для соответствующих школ, и я должен отображать детали school Admin, которые вставляли данные со сведениями о студенте, которые он ввел.Mongoose.deepPopulate не работает должным образом

Моя students схема выглядит следующим образом:

userId: { 
    type: Object, 
    ref: 'User' 
}, 
ugId:{ 
    type:Number 

}, 
firstName:{ 
    type:String, 
    required:true 
}, 
lastName:{ 
    type:String, 
    required:true  
} 

Здесь вы можете увидеть, что userId имеет в виду модель называется User которой схема выглядит следующим образом:

//More Fields 
mappedUserDetails2: { 
    type: Schema.Types.ObjectId, 
    ref: 'Students' 
}, 
UserGroupID: { 
    type: Object, 
    ref: 'UserGroups' 
} 

В User схеме, UserGroupID относится к UserGroups Модель, схема которой выглядит следующим образом:

groupName: { 
    type: String, 
    required: true, 
    index: true, 
    unique: true 
}, 
createdDate: { 
    type: Date, 
    default: Date.now 
}, 
updatedDate: { 
    type: Date, 
    default: Date.now 
}, 
uid: { 
    type: Number, 
    min: 1 
}, 
mappedUserDetails3: { 
    type: Schema.Types.ObjectId, 
    ref: 'User' 
} 

Данные, которые я разместил следующим образом:

{ 
"userId":"55b7320173ceb5640e1b24a6", 
"ugId":3, 
"firstName":"AGGI", 
"lastName":"AGGIqa" 
} 

Мой код, который выполняет deepPopulate для userId и userId.UserGroupID для данного студента на students модели, которая выглядит следующим образом:

Students.findOne({ _id: data._doc._id}).deepPopulate('userId', '-password').deepPopulate('userId.UserGroupID').exec(function (err, data) { 
    if (err) { 
      return res.json({ 
           success: false, 
           exception: err 
          }); 
    } else { 
      return res.json({ 
           success: true, 
           userDetails: data 
          }); 
     } 
}); 

Когда я запускаю API на DHC, у меня не было вывода и с помощью инспектора узлов я обнаружил, что мой API разбивается на deepPopulate. Может кто-нибудь указать, где я делаю ошибку, и что такое обходной путь?

+0

Попробуйте изменить поля 'ref' на' type: Object' to be type: Schema.Types.ObjectId' вместо этого. – JohnnyHK

+0

Привет, Джонни У вас есть идея why.deepPopulate ('userId', '-password'). DeepPopulate ('userId.UserGroupID') не работает? Я изменил поля полей ref: object to type: Schema.Types.ObjectId и все еще API был взломан? – shubhamagiwal92

ответ

1

Я пробовал использовать следующий формат для моего deepPopulate, и это сработало.

Students.findOne({_id: data._doc._id}).deepPopulate(['userId', 'userId.UserGroupID']).exec(function (err, data) { 
    if (err) { 
      return res.json({ 
        success: false, 
        exception: err 
      }); 
    } else { 
      delete data._doc.userId._doc.password; 
       return res.json({ 
          success: true, 
          userDetails: data 
        }); 

     } 

}); 
Смежные вопросы