skip to Main Content

In my application, I am attempting to update a object nested in an array as a below. When testing in postman, there is a delay causing me to have to make two requests in order to see the updated value.

if (taskStatus) {
    const taskStatusNew = await Board.findOneAndUpdate(
      {
        "columns.tasks._id": req.params.id,
      },
      {
        $set: {
          "columns.$[].tasks.$[t]": req.body,
        },
      },
      {
        arrayFilters: [
          {
            "t._id": req.params.id,
          },
        ],
      }
    );
    res.status(200).json(taskStatusNew);
  }

2

Answers


  1. By default, findOneAndUpdate() returns the document as it was before the update was applied. So you have to set the new option to true if you are using mongoose.

    const taskStatusNew = await Board.findOneAndUpdate(
          {
            "columns.tasks._id": req.params.id,
          },
          {
            $set: {
              "columns.$[].tasks.$[t]": req.body,
            },
          },
          {
            arrayFilters: [
              {
                "t._id": req.params.id,
              },
            ],
            new: true
          }
        );
    

    Documentation article for reference: https://mongoosejs.com/docs/tutorials/findoneandupdate.html

    Login or Signup to reply.
  2. If your question is like to return the updated value then use this,- {returnDocument: ‘after’}, you just need to add this in other parameter, then it will give you updated value.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search