.aggregate() методът винаги връща Objects каквото и да правите и това не може да се промени.
За вашата цел вероятно е по-добре да използвате .distinct() вместо това, което просто връща масив от различни стойности:
db.users.distinct("emails.address");
Кой е точно желаният от вас изход:
["example@sqldat.com","example@sqldat.com","example@sqldat.com"]
Ако наистина искате да използвате .aggregate() тогава трансформацията само до стойностите трябва да се случи "извън" на израза при последваща обработка. Освен това трябва да използвате $unwind когато работите с масиви като този.
Можете да направите това с JavaScript .map() например:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Което дава същия изход, но .map() извършва трансформацията от страна на клиента вместо на сървъра.