1

我正在尝试向数组中添加一个新元素。

这是代码:

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

3 回答 3

1

您可以在进行这些更新时使用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);
    }
};
于 2020-05-27T09:04:51.997 回答
1

如果您只是计划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);
    }
  );
};
于 2020-05-27T11:27:25.963 回答
1

正如您在控制台中看到的:

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

所以你可以通过这个使用Person.updateOne而不是Person.update 希望它有帮助

于 2020-05-27T09:59:30.957 回答