猫鼬findOneAndUpdate不更新

时间:2020-07-24 04:09:59

标签: node.js reactjs express mongoose

我试图在单击按钮时将布尔值更新为true。当我在controller update方法中console.log响应的主体时,updated字段是正确的,但在数据库中未更改。同样,响应是巨大的,因此我认为我发送的邮件有问题。我设置了{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));
  },

1 个答案:

答案 0 :(得分: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));
  }