Recently upgraded to mongoose 4.0.2. The following code was working previously, but now results in the document being created but not passed to the callback:
Milestone.findOneAndUpdate({
......
}, {
......
}, {upsert: true}, function(err, res) {
// err === null
// res === null
done(err, res);
});
This is only occurring on upsert. I can verify the document is created, but both err and res are consistently null. If I call the function again (now that the document exists) it works as expected.
mongoose: 4.0.2
node: v0.12.2
mongodb: 2.6.9
Use the new: true
option, see 4.0 release notes notes on #2262.
Milestone.findOneAndUpdate({
......
}, {
......
}, {upsert: true, 'new': true}, function(err, res) {
// err === null
// res === null
done(err, res);
});
Thanks! Why does the document still get created if I leave out new: true
?
new
is false by default, and when new
is false MongoDB returns the document as it was before the update operation was applied. In the case of upserts, there was no document, hence null.
Ah I see, thank you!
Most helpful comment
Use the
new: true
option, see 4.0 release notes notes on #2262.