.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:
["[email protected]","[email protected]","[email protected]"]
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.