Från och med Mongoose 4+, glöm inte att ställa in nytt:sant tillsammans med upsert eller så får du det gamla dokumentet som ett returvärde, inte det uppdaterade.
Detta är ganska knepigt, särskilt när begäran skapar ett dokument, som om du inte anger nytt:sant, du får ett nulldokument (det fanns inget befintligt dokument), men inget fel.
var myObj = ...;
collection.findOneAndUpdate(
{uniqueAttr: myObj.uniqueAttr},
myObj,
{upsert: true, new: true},
function(...) {...}