.aggregate()
metoda vždy vrací Objects
bez ohledu na to, co děláte, a to se nemůže změnit.
Pro váš účel je pravděpodobně lepší použít .distinct()
místo toho vrací pouze pole různých hodnot:
db.users.distinct("emails.address");
Což je přesně váš požadovaný výstup:
["[email protected]","[email protected]","[email protected]"]
Pokud opravdu chcete použít .aggregate()
pak k transformaci pouze na hodnoty musí dojít „mimo“ výraz v postprocesingu. A také byste měli používat $unwind
při práci s poli, jako je toto.
Můžete to udělat pomocí JavaScriptu .map()
například:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Což dává stejný výstup, ale .map()
provádí transformaci na straně klienta namísto na serveru.