MongoError: Performing an update on the path '_id' would modify the immutable field '_id'解决办法

 问题

最近在用mongoose更新数据库时报了这个错误:

MongoError: Performing an update on the path '_id' would modify the immutable field '_id'

 我的代码:

// 建立数据集
var movie = new mongoose.Schema({
    movieName: String,
    movieImg: String,
    movieVideo: String,
    movieDownload: String,
    movieTime: String,
    movieNumSuppose: Number,
    movieNumDownload: Number,
    movieMainPage: Boolean
});

var movieModel = mongoose.model('movie', movie);
module.exports = movieModel;

// 错误的更新代码

var updateContent = new movie({
    movieName: req.body.movieName,
    movieImg: req.body.movieImg,
    movieVideo: req.body.movieVideo,
    movieDownload: req.body.movieDownload,
    movieTime: req.body.movieTime,
    movieNumSuppose: req.body.movieNumSuppose,
    movieNumDownload: req.body.movieNumDownload,
    movieMainPage: movieMainPage
});

movie.update({_id: req.body.movie_id}, updateContent, function (err, movieUpdate) {
    if(movieUpdate.nModified == 0 || err)
        res.json({status: 1, message: "电影信息没有改变或修改失败"+err});
    else
        res.json({status:0, message: "电影信息修改成功", data: movieUpdate});
})

 注:mongoose 的 update 语法 

Model.update(conditions, doc, [options], [callback])

conditions: 更新的条件,该值是一个对象。
doc: 需要更新的内容,该值也是一个对象。
options: 可选参数,它有如下属性:  safe,upsert,multi,runValidators,strict,overwrite
callback: 回调函数


解决办法

通过查阅资料终于发现了问题所在(红字部分): 这里的updateContent应该只是一个简单的对象,而不是一个Mongoose文档

// 正确的更新代码
var updateContent = {
    movieName: req.body.movieName,
    movieImg: req.body.movieImg,
    movieVideo: req.body.movieVideo,
    movieDownload: req.body.movieDownload,
    movieTime: req.body.movieTime,
    movieNumSuppose: req.body.movieNumSuppose,
    movieNumDownload: req.body.movieNumDownload,
    movieMainPage: movieMainPage
};

movie.update({_id: req.body.movie_id}, updateContent, function (err, movieUpdate) {
    if(movieUpdate.nModified == 0 || err)
        res.json({status: 1, message: "电影信息没有改变或修改失败"+err});
    else
        res.json({status:0, message: "电影信息修改成功", data: movieUpdate});
})

 

参考:Mongoose findOneAndUpdate() issue [duplicate]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangjun0708

你的打赏将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值