Puoi fare tutto questo con un singolo update chiama il modello invece di recuperarlo prima con findOne :
User.update(
{'addresses._id': address_id},
{$set: {'addresses.$.street': 'Blah'}},
function(err, count) { ... });
Questo utilizza il posizionale $ operatore
nel $set per scegliere come target solo gli addresses elemento che è stato trovato nella query.