Od verze Mongoose 4+ nezapomeňte nastavit nové:true spolu s upsert nebo jako návratovou hodnotu získáte starý dokument, nikoli aktualizovaný.
To je docela složité, zvláště když požadavek vytváří dokument, jako když nezadáte new:true, obdržíte prázdný dokument (neexistoval žádný dokument), ale žádná chyba.
var myObj = ...;
collection.findOneAndUpdate(
{uniqueAttr: myObj.uniqueAttr},
myObj,
{upsert: true, new: true},
function(...) {...}