2016-01-20 2 views
1

Я пытаюсь обновить документ, который содержит 2 других документа. Для достижения этой цели я использую findOneAndUpdate, но mongoose бросает мне CastError (Cast to ObjectId failed).Mongoose findOneAndUpdate вложенные документы

Мои модели:

user.js

var userSchema = new Schema({ 
    email: String, 
    info: { 
     type : Schema.ObjectId, 
     required : true, 
     ref : 'Info' 
    } 
}); 
module.exports = mongoose.model('User', userSchema); 

info.js

var infoSchema = new Schema({ 
    firstname: String, 
    lastname: String 
}); 
module.exports = mongoose.model('Info', infoSchema); 

Мой запрос:

var tmp = { 
    email: req.body.email, 
    info: { 
     name: req.body.info.name 
    } 
}; 

User.findOneAndUpdate({ 
    _id: req.params.id 
}, tmp, { 
    upsert: false, 
    new: true 
}).exec(function(err, doc) { 
    /* check errors */ 
    /* send response */ 
}); 

Что я делаю неправильно? Неужели мои модели плохо настроены?

ответ

0

CastError: Cast to ObjectId failed

Тип info является Schema.ObjectId, в то время как один объект

info: { 
    name: req.body.info.name 
} 

передается в него, как ObjectId, как результат, он не смог.

Здесь возможно одна работа вокруг.

var new_info = new Info({ 
    firstname: req.body.info.name.firstname, // 
    lastname: req.body.info.name.lastname //  
}); 

new_info.save(function(err, doc) { 
    if (err) 
     console.log(err); 
    else { 
     var tmp = { 
      email: req.body.email, 
      info: doc._id 
     } 

     User.findOneAndUpdate({ 
      _id: req.params.id 
     }, tmp, { 
      upsert: false, 
      new: true 
     }).exec(function(err, doc) { 
      // 
     });   
    } 
}); 
+0

Спасибо за ответ. К сожалению, мой идентификатор хороший, я проверил. – auk

+0

@auk, я думаю, что нашел вашу проблему ... – zangw

Смежные вопросы