Le .aggregate()
la méthode renvoie toujours Objects
quoi que vous fassiez et cela ne peut pas changer.
Pour votre objectif, vous feriez probablement mieux d'utiliser .distinct()
à la place, qui renvoie simplement un tableau des valeurs distinctes :
db.users.distinct("emails.address");
Quelle est exactement la sortie souhaitée :
["[email protected]","[email protected]","[email protected]"]
Si vous voulez vraiment utiliser .aggregate()
alors la transformation en valeurs uniquement doit se produire "en dehors" de l'expression en post-traitement. Et vous devriez également utiliser $unwind
lorsqu'il s'agit de tableaux comme celui-ci.
Vous pouvez le faire avec JavaScript .map()
par exemple :
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Ce qui donne la même sortie, mais le .map()
effectue la transformation côté client plutôt que sur le serveur.