Die .aggregate()
-Methode gibt immer Objects
zurück egal was du tust und das kann sich nicht ändern.
Für Ihren Zweck sind Sie wahrscheinlich besser dran, wenn Sie .distinct()
verwenden stattdessen, was nur ein Array der unterschiedlichen Werte zurückgibt:
db.users.distinct("emails.address");
Welches ist genau Ihre gewünschte Ausgabe:
["[email protected]","[email protected]","[email protected]"]
Wenn Sie wirklich .aggregate()
verwenden möchten dann muss die Transformation in nur die Werte "außerhalb" des Ausdrucks in der Nachbearbeitung erfolgen. Und Sie sollten auch $unwind
verwenden beim Umgang mit Arrays wie diesem.
Sie können dies mit JavaScript .map()
tun zum Beispiel:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Was die gleiche Ausgabe ergibt, aber .map()
führt die Umwandlung clientseitig statt auf dem Server durch.