Make Mongoose's findOneAndUpdate() Return the Updated Document
Oct 13, 2021
To make findOneAndUpdate() return the updated document, you need to use the returnDocument option.
returnDocument has two possible values: 'before' and 'after'.
The default behavior is 'before', which means returning the document as it was before the update was applied.
const testSchema = new mongoose.Schema({
name: String
});
await Test.create({name: 'Test Testerson'});
await Model.findOneAndUpdate({name: 'Test Testerson'}, {name: 'MasteringJS.io'}, {returnDocument: 'before'});
// {name: 'Test Testerson', _id: ... , __v: ...}
await Model.findOneAndUpdate({name: 'Test Testerson'}, {name: 'MasteringJS.io'}, {returnDocument: 'after'});
// {name: 'MasteringJS.io', _id: ... , __v: ...}
The Time Before returnDocument
Before returnDocument was implemented, there were two similar options: returnOriginal or new.
Both were booleans that did what returnDocument does now.
await Model.findOne(filter, update, {returnOriginal: false}); // equivalent to returnDocument: 'after'
await Model.findOne(filter, update, {new: true}); // equivalent to returnDocument: 'after'
Note: Mongoose still supports returnOriginal and new.
But returnDocument is the recommended approach.
Want to become your team's MongoDB expert? "Mastering Mongoose" distills 8 years of hard-earned
lessons building Mongoose apps at scale into 153 pages. That means you can learn what you need
to know to build production-ready full-stack apps with Node.js and MongoDB in a few days.
Get your copy!
Did you find this tutorial useful? Say thanks by starring our repo on GitHub!