Mongoose findOneAndUpdate nested documents

允我心安 提交于 2021-02-08 04:47:40

问题


I'm trying to update a document which contains 2 other documents. To achieve this task, I use findOneAndUpdate, but mongoose throws me a CastError (Cast to ObjectId failed).

My models:

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);

My query:

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 */
});

What am I doing wrong? Are my models poorly set?


回答1:


CastError: Cast to ObjectId failed

The type of info is Schema.ObjectId, whereas one object

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

is passed into it as ObjectId, as result, it failed.

Here maybe one work around.

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) {
            //
        });         
    }
});


来源:https://stackoverflow.com/questions/34889271/mongoose-findoneandupdate-nested-documents

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!