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.