'findOneAndUpdate ()' не обновляет существующие данные в mongo db - PullRequest
0 голосов
/ 10 октября 2018

Я разрабатываю веб-приложение, используя MEAN Stack с Angular 6. Там, если пользователь ранее добавил данные в базу данных, эти данные должны быть обновлены.Для этого я использовал findOneAndUpdate() метод. Но без обновления существующих данных он отправляет другой набор данных в базу данных.

Это мой маршрут сообщения.Это 'userName' происходит из другой схемы.

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));

output

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

Как сделать это только для обновления данных.

1 Ответ

0 голосов
/ 10 октября 2018

Пожалуйста, проверьте этот запрос.

Это обновит, если данные существуют с 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);
  }
);
...