.aggregate()
metod returnerar alltid Objects
oavsett vad du gör och det kan inte ändras.
För ditt ändamål är det förmodligen bättre att använda .distinct()
istället, vilket bara returnerar en array av de distinkta värdena:
db.users.distinct("emails.address");
Vilket är exakt din önskade utdata:
["[email protected]","[email protected]","[email protected]"]
Om du verkligen vill använda .aggregate()
då behöver omvandlingen till bara värdena ske "utanför" uttrycket i efterbehandling. Och du bör också använda $unwind
när man hanterar sådana här arrayer.
Du kan göra detta med JavaScript .map()
till exempel:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Vilket ger samma utdata, men .map()
gör transformationsklientsidan istället för på servern.