Możesz to wszystko zrobić za pomocą jednej update wywołaj model zamiast najpierw go pobrać za pomocą findOne :
User.update(
{'addresses._id': address_id},
{$set: {'addresses.$.street': 'Blah'}},
function(err, count) { ... });
Wykorzystuje to pozycyjny $ operator
w $set kierować tylko na addresses element, który został dopasowany w zapytaniu.