.aggregate()
методът винаги връща Objects
каквото и да правите и това не може да се промени.
За вашата цел вероятно е по-добре да използвате .distinct()
вместо това, което просто връща масив от различни стойности:
db.users.distinct("emails.address");
Кой е точно желаният от вас изход:
["[email protected]","[email protected]","[email protected]"]
Ако наистина искате да използвате .aggregate()
тогава трансформацията само до стойностите трябва да се случи "извън" на израза при последваща обработка. Освен това трябва да използвате $unwind
когато работите с масиви като този.
Можете да направите това с JavaScript .map()
например:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Което дава същия изход, но .map()
извършва трансформацията от страна на клиента вместо на сървъра.