我试图更新包含2个其他文档的文档。要完成此任务,我使用findOneAndUpdate
,但是猫鼬会向我发送CastError
(Cast to ObjectId failed
)。
var userSchema = new Schema({
email: String,
info: {
type : Schema.ObjectId,
required : true,
ref : 'Info'
}
});
module.exports = mongoose.model('User', userSchema);
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 :(得分:0)
CastError:强制转换为ObjectId
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) {
//
});
}
});