.aggregate() metode returnerer altid Objects uanset hvad du gør, og det kan ikke ændre sig.
Til dit formål er du sandsynligvis bedre stillet ved at bruge .distinct() i stedet, hvilket bare returnerer en række af de forskellige værdier:
db.users.distinct("emails.address");
Hvilket er præcis dit ønskede output:
["example@sqldat.com","example@sqldat.com","example@sqldat.com"]
Hvis du virkelig vil bruge .aggregate() så skal transformationen til netop værdierne ske "uden for" udtrykket i efterbehandlingen. Og du bør også bruge $unwind når man beskæftiger sig med arrays som denne.
Du kan gøre dette med JavaScript .map() for eksempel:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Hvilket giver det samme output, men .map() udfører transformationen på klientsiden i stedet for på serveren.