De .aggregate()
methode retourneert altijd Objects
wat je ook doet en dat kan niet veranderen.
Voor jouw doel ben je waarschijnlijk beter af met .distinct()
in plaats daarvan, die alleen een array van de verschillende waarden retourneert:
db.users.distinct("emails.address");
Wat is precies uw gewenste output:
["[email protected]","[email protected]","[email protected]"]
Als je echt .aggregate()
wilt gebruiken dan moet de transformatie naar alleen de waarden "buiten" de uitdrukking in de nabewerking plaatsvinden. En je zou ook $unwind
moeten gebruiken bij het omgaan met arrays zoals deze.
U kunt dit doen met JavaScript .map()
bijvoorbeeld:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Wat dezelfde output geeft, maar de .map()
doet de transformatie aan de clientzijde in plaats van op de server.