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?

Original source