От Mongoose 4+ не забравяйте да зададете new:true заедно с upsert или ще получите стария документ като връщана стойност, а не актуализирания.
Това е доста сложно, особено когато заявката създава документ, сякаш не посочите нов:true, получавате нулев документ (няма съществуващ документ), но няма грешка.
var myObj = ...;
collection.findOneAndUpdate(
{uniqueAttr: myObj.uniqueAttr},
myObj,
{upsert: true, new: true},
function(...) {...}