Ope Afolabi
Ope Afolabi

Reputation: 135

Delay when updating document (MongoDB/Mongoose)

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

Upvotes: 0

Views: 564

Answers (2)

MohdFaizan_06
MohdFaizan_06

Reputation: 52

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.

Upvotes: 1

Dezzley
Dezzley

Reputation: 1835

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

Upvotes: 1

Related Questions