Il .aggregate()
il metodo restituisce sempre Objects
non importa quello che fai e questo non può cambiare.
Per il tuo scopo probabilmente è meglio usare .distinct()
invece, che restituisce semplicemente un array di valori distinti:
db.users.distinct("emails.address");
Qual è esattamente l'output desiderato:
["[email protected]","[email protected]","[email protected]"]
Se vuoi davvero usare .aggregate()
quindi la trasformazione ai soli valori deve avvenire "al di fuori" dell'espressione in post-elaborazione. E dovresti anche usare $unwind
quando si ha a che fare con array come questo.
Puoi farlo con JavaScript .map()
ad esempio:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Che dà lo stesso output, ma il .map()
esegue la trasformazione lato client anziché sul server.