I'm trying to use the update option { fullResult: true }
option in a MongoDB.
collection.update(query, payload, { fullResult: true }, function(err, result) {
console.log(result);
});
While it does change the value of result, I'm not getting back the document. Instead, I'm getting back:
[ { updatedExisting: true,
n: 1,
lastOp: { _bsontype: 'Timestamp', low_: 1, high_: 1403025407 },
connectionId: 510045,
err: null,
ok: 1 } ]
Is there something else I should be doing in order to get back to the updated document?
Use findAndModify
:
collection.findAndModify(query,[['_id',1]],payload,{new:true},function(err,result) {
if ( err ) {
console.warn(err);
} else {
console.log(result);
}
});
The new
option will return the updated document when set to true
. If set to false
, it will return the old document before update.
findAndModify
also requires a sort parameter. If sorting is not important, then sorting on _id will be fine, but try to sort on something indexed.
Using fullResult
with update
does not do what you think. I agree, the docs are a bit confusing. Let the Node.js driver source speak for itself at /lib/mongodb/collection/core.js:568-572
568 if(fullResult) return callback(null, result);
569 // Backward compatibility format
570 var r = backWardsCompatibiltyResults(result, 'update');
571 // Return the results for a whole batch
572 callback(null, r.n, r)
Regardless if fullResult
is used, the result
object is returned rather than a list of documents. The result
object is what is returned from the raw db command via db.command
. In the case when fullResult
is used, it will return the raw unmodified result object - but still not documents.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With