「フィールドを返す」とはどういう意味か完全にはわかりませんが、lean()
を使用できます。 出力を自由に変更できるようにクエリを実行し、両方のフィールドにデータを入力して結果を後処理し、必要なフィールドのみを保持します。
.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;
}
});