.aggregate() विधि हमेशा Objects लौटाती है कोई फर्क नहीं पड़ता कि आप क्या करते हैं और वह बदल नहीं सकता।
अपने उद्देश्य के लिए आप शायद .distinct() . का उपयोग करना बेहतर समझते हैं इसके बजाय, जो केवल विशिष्ट मानों की एक सरणी लौटाता है:
db.users.distinct("emails.address");
वास्तव में आपका वांछित आउटपुट कौन सा है:
["example@sqldat.com","example@sqldat.com","example@sqldat.com"]
अगर आप वाकई .aggregate() . का इस्तेमाल करना चाहते हैं तो पोस्ट प्रोसेसिंग में अभिव्यक्ति के "बाहर" होने के लिए केवल मूल्यों के लिए परिवर्तन की आवश्यकता होती है। और आपको $unwind . का भी उपयोग करना चाहिए इस तरह की सरणियों से निपटने के दौरान।
आप इसे JavaScript .map() . के साथ कर सकते हैं उदाहरण के लिए:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
जो समान आउटपुट देता है, लेकिन .map() सर्वर के बजाय ट्रांसफ़ॉर्मेशन क्लाइंट साइड करता है।