.aggregate() metoda vždy vrací Objects bez ohledu na to, co děláte, a to se nemůže změnit.
Pro váš účel je pravděpodobně lepší použít .distinct() místo toho vrací pouze pole různých hodnot:
db.users.distinct("emails.address");
Což je přesně váš požadovaný výstup:
["example@sqldat.com","example@sqldat.com","example@sqldat.com"]
Pokud opravdu chcete použít .aggregate() pak k transformaci pouze na hodnoty musí dojít „mimo“ výraz v postprocesingu. A také byste měli používat $unwind při práci s poli, jako je toto.
Můžete to udělat pomocí JavaScriptu .map() například:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Což dává stejný výstup, ale .map() provádí transformaci na straně klienta namísto na serveru.