Imestin
Imestin

Reputation: 49

model.update() not updating

I'm trying to add a new element to an array.

This is the code:

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




};

This is the whole code on Glitch: https://glitch.com/edit/#!/holly-maroon-pony?path=myApp.js%3A226%3A0

This is the console log for a POST request:

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"]

Upvotes: 1

Views: 103

Answers (3)

vishnu
vishnu

Reputation: 2011

If you are just planning to update a document and return the updated document you can do something like this

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

Upvotes: 1

Ganesh Shetty
Ganesh Shetty

Reputation: 35

As you can see in your console:

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

So you can get through this using Person.updateOne instead of Person.update Hope it helps

Upvotes: 1

Sagar Kulkarni
Sagar Kulkarni

Reputation: 503

You can use async and await while making these updates.

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

Upvotes: 1

Related Questions