猫鼬 findOneAndUpdate 不更新

Posted

技术标签:

【中文标题】猫鼬 findOneAndUpdate 不更新【英文标题】:Mongoose findOneAndUpdate not updating 【发布时间】:2020-11-13 21:54:31 【问题描述】:

我正在尝试在单击按钮时将布尔值更新为 true。当我在控制器更新方法中 console.log 响应的正文时,更新的字段是正确的,但在数据库中没有更改。响应也很大,所以我认为我发送的内容有问题。我设置了 new: true ,但仍然没有区别。我在这里做错了什么。这是我的代码:

型号

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const albumSchema = new Schema(
    albumId:  type: String ,
    title:  type: String ,
    artist:  type: String ,
    tracks:  type: [String], required: true ,
    year:  type: Number, required: true ,
    thumbnail:  type: String ,
    description:  type: String ,
    listened:  type: Boolean, default: false ,
);

const Album = mongoose.model("Album", albumSchema);

module.exports = Album;

反应

    changeStatus = (album) => 
      album.listened = true;
      API.updateAlbum(album)
    

API

  updateAlbum: function(album) 
    return axios.put(`/api/albums/$album._id`, album);
  ,

路由

router.route("/albums/:id").put(albumController.update)

猫鼬控制器

  update: function(req, res) 
    db.Album.findOneAndUpdate( id: req.params.id , req.body,  new: true )
      .then(dbAlbum => res.json(dbAlbum.body))
      .catch(err => res.status(422).json(err));
  ,

【问题讨论】:

更新后必须保存文档。 @butthash3030 您可以使用updateOne() 方法,而不是使用findOneAndUpdate() 然后保存文档。此外,这个问题看起来与此类似,***.com/questions/51160223/… @KarthickRam 我选择了您的解决方案,并且效果很好。谢谢! 【参考方案1】:

更新后必须保存文档

 update: function(req, res) 
    db.Album.findOneAndUpdate( id: req.params.id , req.body,  new: true )
      .then((dbAlbum)=>
          dbAlbum.save()
            .then((saved)=>
                res.json(dbAlbum)
            )
            .catch((err)=>
                res.status(422).json(err)
            )

      )
      .catch(err => res.status(422).json(err));
  

【讨论】:

以上是关于猫鼬 findOneAndUpdate 不更新的主要内容,如果未能解决你的问题,请参考以下文章

如果不存在但不更新,如何在猫鼬中创建

如果不存在但不更新,如何在猫鼬中创建

将 findOne 和 findOneAndUpdate 与 HTTP 请求一起使用(猫鼬)

猫鼬 findOneAndUpdate Upsert _id null?

猫鼬更新数组对象中的字段

findOneAndUpdate 导致重复问题