【问题标题】:'findOneAndUpdate()' does not update the existing data in mongo db'findOneAndUpdate()' 不会更新 mongodb 中的现有数据
【发布时间】:2019-03-14 20:47:10
【问题描述】:

我正在使用带有 Angular 6 的 MEAN Stack 开发 Web 应用程序。如果用户之前已将数据添加到数据库中,则应更新数据。为此,我使用了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]

我怎样才能让它只更新数据。

【问题讨论】:

  • 对不起,我是 MEAN Stack 的新手。我怎样才能删除那部分?
  • req.body的内容是什么?你能在问题中添加一个console.log吗
  • 我添加了架构
  • @Akrion 用 console.log 的输出更新了问题
  • findOneAndUpdate() 使用专门设计的更新文档进行部分更新操作。你需要的是findOneAndReplace()

标签: node.js mongodb mongoose mean-stack


【解决方案1】:

请检查此查询。

如果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);
  }
);

【讨论】:

  • 您对答案的描述是正确的。据我了解,当我添加一个新值时,它会同时检查用户名和“movementBox”。然后它变成一个新的对象。这就是它再次发布的原因。当我只检查常量 one(userName) 并在 post route 中删除另一个时,它按预期工作。感谢您的描述。
猜你喜欢
  • 2021-11-20
  • 2020-07-11
  • 2019-04-19
  • 1970-01-01
  • 2022-08-02
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多