Od Mongoose 4+ nie zapomnij ustawić nowe:prawda wraz z upsert lub otrzymasz stary dokument jako wartość zwracaną, a nie zaktualizowaną.
Jest to dość trudne, zwłaszcza gdy żądanie tworzy dokument, tak jakbyś nie określił new:true, otrzymasz pusty dokument (nie było istniejącej dokumentacji), ale bez błędu.
var myObj = ...;
collection.findOneAndUpdate(
{uniqueAttr: myObj.uniqueAttr},
myObj,
{upsert: true, new: true},
function(...) {...}