Você pode fazer tudo isso com uma única
update chame o modelo em vez de buscá-lo primeiro com findOne :User.update(
{'addresses._id': address_id},
{$set: {'addresses.$.street': 'Blah'}},
function(err, count) { ... });
Isso usa o
$ posicional operador
no $set para segmentar apenas os addresses elemento que foi correspondido na consulta.