Je ne suis pas tout à fait clair sur ce que vous entendez par "renvoyer un champ", mais vous pouvez utiliser un lean()
requête afin que vous puissiez modifier librement la sortie, puis remplissez les deux champs et post-traitez le résultat pour ne conserver que le champ souhaité :
.lean().populate('user', 'email.address facebook.address')
.exec(function (err, subscription){
if (subscription.user.email.address) {
delete subscription.user.facebook;
} else {
delete subscription.user.email;
}
});