.aggregate()
metode selalu mengembalikan Objects
apa pun yang Anda lakukan dan itu tidak dapat berubah.
Untuk tujuan Anda, Anda mungkin lebih baik menggunakan .distinct()
sebagai gantinya, yang hanya mengembalikan larik nilai yang berbeda:
db.users.distinct("emails.address");
Manakah keluaran yang Anda inginkan:
["[email protected]","[email protected]","[email protected]"]
Jika Anda benar-benar ingin menggunakan .aggregate()
maka transformasi ke nilai saja perlu terjadi "di luar" ekspresi dalam pemrosesan pasca. Dan Anda juga harus menggunakan $unwind
ketika berhadapan dengan array seperti ini.
Anda dapat melakukannya dengan JavaScript .map()
misalnya:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Yang memberikan output yang sama, tetapi .map()
melakukan transformasi sisi klien alih-alih di server.