'findOneAndUpdate()'不更新mongo db中的现有数据

时间:2018-10-10 02:30:58

标签: node.js mongodb mongoose mean-stack

我正在使用MEAN Stack和Angular 6开发Web应用程序。如果用户以前已将数据添加到db中,则应该更新数据。为此,我使用了findOneAndUpdate()方法。 但不更新现有数据,它会将另一个数据集发布到数据库中。

这是我的发布路线。此“用户名”来自不同的架构。

router.post('/save', function(req, res) {
  var mod = new rdaColor(req.body);

  rdaColor.findOneAndUpdate(
    {
      userName: req.body.userName,
      colorMovementBox: req.body.colorMovementBox
    },
    req.body,
    { upsert: true, new: true },
    function(err, data) {
      if (err) {
        console.log(err);
        res.send(err);
      } else {
        res.send(mod);
      }
    }
  );
});

这是架构。

var mongoose = require('mongoose');

    // Schema for rda color panel
    var rdaColorSchema = new mongoose.Schema({
        userName: {
            type: String
        },
        colorMovementBox: {
            type: String,
        },

    });


module.exports = mongoose.model('rdaColor', rdaColorSchema);

这是以下console.log的输出。

console.log("mod"+mod+" "+(req.body));

输出

mod{ _id: 5bbd68344619a612b07a688e,
  userName: 'abc@yahoo.com',
  colorMovementBox: 'rgb(49,64,116)',
  } [object Object]

如何仅更新数据。

1 个答案:

答案 0 :(得分:0)

请检查此查询。

  

如果数据中包含Id,它将更新;如果不存在,则创建新数据。

     

如果您删除upsert: true,则它不创建新记录(如果不存在)。

rdaColor.findOneAndUpdate(
  { _id: "yourId" },
  {
    $set: {
      userName: req.body.userName,
      colorMovementBox: req.body.colorMovementBox
    }
  },
  { upsert: true, new: true },
  function(err, doc) {
    if (err) {
      console.log("Something wrong when updating data!");
    }
    console.log(doc);
  }
);