model.update () не обновляется - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь добавить новый элемент в массив.

Это код:

var findEditThenSave = function(personId, done) {
  var foodToAdd = 'hamburger';
  var foodArray = [];



  Person.findById(personId, function (err, data) {
    if (err) return console.log(err);
    done(null, data);
    foodArray = data.favoriteFoods;
    console.log("foodArray inside findById: ", foodArray);
    foodArray.push(foodToAdd);
    var updateObj = {favoriteFoods: foodArray};
    console.log(updateObj)


    Person.update({_id: personId}, updateObj, function(err, raw) {
      if (err) {
        console.log("There was an error");

      }

      console.log("Updated successfully");
      console.log("foodArray inside update function:", foodArray);
    });
  });




};

Это весь код на Glitch: https://glitch.com/edit/#! / Holly-maroon-pony? Path = myApp.js% 3A226% 3A0

Это журнал консоли для запроса POST:

POST
foodArray inside findById:  ["spaghetti"]
{ favoriteFoods: ["spaghetti","hamburger"] }
(node:8943) DeprecationWarning: collection.update is deprecated. Use updateOne, updateMany, or bulkWrite instead.
Updated successfully
foodArray inside update function: ["spaghetti","hamburger"]

Ответы [ 3 ]

1 голос
/ 27 мая 2020

Как вы можете видеть в консоли:

(node:8943) DeprecationWarning: collection.update is             
deprecated. Use updateOne, updateMany, or bulkWrite instead.
Updated successfully

Таким образом, вы можете пройти через это, используя Person.updateOne вместо Person.update Надеюсь, это поможет

1 голос
/ 27 мая 2020

Если вы просто планируете update документ и вернуть обновленный документ, вы можете сделать что-то вроде этого

function update(personId) {
  var foodToAdd = "hamburger";
  const person = Person.findByIdAndUpdate(
    personId,
    { $push: { favoriteFoods: foodToAdd } },
    { new: true },
    function (err, result) {
      if (err) console.log(err);
      else console.log(result);
    }
  );
};
1 голос
/ 27 мая 2020

Вы можете использовать async и await при внесении этих обновлений.

var findEditThenSave = async function(personId, done){
    var foodToAdd = 'hamburger';
    var foodArray = [];
    var updateObj;

    try{
        var data=await Person.findById(personId);
        done(null, data);
        foodArray = data.favoriteFoods;
        console.log("foodArray inside findById: ", foodArray);
        foodArray.push(foodToAdd);
        updateObj = {favoriteFoods: foodArray};
        console.log(updateObj)
    }catch(err){
        console.log(err);
    }

    try{
        await Person.update({_id: personId}, updateObj);
        console.log("Updated successfully");
        console.log("foodArray inside update function:", foodArray);
    }catch(err){
        console.log(err);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...