.aggregate()
phương thức luôn trả về Objects
bất kể bạn làm gì và điều đó không thể thay đổi.
Đối với mục đích của bạn, bạn có lẽ tốt hơn nên sử dụng .distinct()
thay vào đó, nó chỉ trả về một mảng các giá trị riêng biệt:
db.users.distinct("emails.address");
Đầu ra chính xác là đầu ra mong muốn của bạn:
["[email protected]","[email protected]","[email protected]"]
Nếu bạn thực sự muốn sử dụng .aggregate()
sau đó chuyển đổi thành chỉ các giá trị cần phải xảy ra "bên ngoài" của biểu thức trong quá trình xử lý bài đăng. Và bạn cũng nên sử dụng $unwind
khi xử lý các mảng như thế này.
Bạn có thể thực hiện việc này với JavaScript .map()
ví dụ:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
Điều này cung cấp cùng một đầu ra, nhưng .map()
chuyển đổi phía máy khách thay vì trên máy chủ.