Update And Return Document In Mongodb
mongodb, node.js
Solution
`collection.update()` will only report the number of documents that were affected to its own callback.
To retrieve the documents while modifying, you can use `collection.findOneAndUpdate()` instead (formerly `.findAndModify()`).
collection.findOneAndUpdate(
{ "code": req.body.code },
{ $set: req.body.updatedFields },
{ returnOriginal: false },
function (err, documents) {
res.send({ error: err, affected: documents });
db.close();
}
);
The `returnOriginal` option (or `new` with Mongoose) lets you specify which version of a found document (original [default] or updated) is passed to the callback.
`returnOriginal` was deprecated in version `3.6`. Use `returnDocument: "before" | "after"` for version `3.6` and later.
Disclaimer: This answer currently refers to the Node.js Driver as of version 3.6. As new versions are released, check their documentation for possibly new deprecation warnings and recommended alternatives.
Problem
I want to get updated documents. This is my original code and it successfully updates but doesn't return the document. ``` collection.update({ "code": req.body.code },{$set: req.body.updatedFields}, function(err, results) { res.send({error: err, affected: results}); db.close(); }); ``` I used the `toArray` function, but this gave the error "Cannot use a writeConcern without a provided callback": ``` collection.update({ "code": req.body.code },{$set: req.body.updatedFields}).toArray( function(err, results) { res.send({error: err, affected: results}); db.close(); }); ``` Any ideas?