mongodb - माँगोडब एग्रीगेशन के साथ स्ट्रिंग की सरणी कैसे लौटाएं




mongodb-query aggregation-framework (2)

.aggregate() विधि हमेशा Objects रिटर्न करती है, चाहे आप क्या करते हैं और जो बदल नहीं सकते हैं।

अपने उद्देश्य के लिए आप संभवत: बेहतर .distinct() का उपयोग करते हुए बेहतर हैं, जो सिर्फ विशिष्ट मानों की एक सरणी को वापस करता है:

db.users.distinct("emails.address");

जो वास्तव में आपका इच्छित आउटपुट है:

["[email protected]","[email protected]","[email protected]"]

यदि आप वास्तव में उपयोग करना चाहते हैं। कुल .aggregate() तो केवल मूल्यों को .aggregate() पोस्ट प्रोसेसिंग में अभिव्यक्ति के "बाहर" होने की आवश्यकता है। और इस तरह से सरणी के साथ व्यवहार करते समय आपको $unwind भी चाहिए।

उदाहरण के लिए आप जावास्क्रिप्ट .map() साथ ऐसा कर सकते हैं:

db.users.aggregate([
    { "$unwind": "$emails" },
    { "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })

जो एक ही आउटपुट देता है, लेकिन .map() सर्वर के स्थान पर रूपांतरण क्लाइंट साइड करता है।

मुझे माँगोडब एग्रीगेशन के साथ स्ट्रिंग की सरणी वापस करने की आवश्यकता है। मैंने निम्नलिखित किया:

db.users.aggregate([{$group: {_id:"$emails.address"}}])

यह वापसी:

{ "_id" : [ "[email protected]" ] }
{ "_id" : [ "[email protected]" ] }
{ "_id" : [ "[email protected]" ] }

क्या इस तरह से तार की सरणी वापस करने का कोई तरीका है:

["[email protected]","[email protected]","[email protected]"]

बहुत बहुत धन्यवाद जो आपकी मदद करने के लिए अपना समय ले रहे हैं ..

संपादित करें

डेटा जोड़ना:

{
    "_id" : "ukn9MLo3hRYEpCCty",
    "createdAt" : ISODate("2015-10-24T03:52:11.960Z"),
    "emails" : [
        {
            "address" : "[email protected]",
            "verified" : false
        }
    ]
}
{
    "_id" : "5SXRXraariyhRQACe",
    "createdAt" : ISODate("2015-10-24T03:52:12.093Z"),
    "emails" : [
        {
            "address" : "[email protected]",
            "verified" : false
        }
    ]
}
{
    "_id" : "WMHWxeymY4ATWLXjz",
    "createdAt" : ISODate("2015-10-24T03:52:12.237Z"),
    "emails" : [
        {
            "address" : "[email protected]",
            "verified" : false
        }
    ]
}

क्या ब्लेक्स सात का जवाब सही है

.गुंड () विधि हमेशा ऑब्जेक्ट्स को रिटर्न करती है, चाहे आप क्या करते हैं और जो बदल नहीं सकते हैं।

हालांकि, इसका यह अर्थ नहीं है कि आप उन्हें किसी सरणी में नहीं डाल सकते हैं और किसी ऑब्जेक्ट में सरणी वापस कर सकते हैं।

मुझे विश्वास है कि डेटाबेस में सरणी में मानचित्रण बेहतर होगा, क्योंकि आपका नोड सर्वर अभी भी अन्य अनुरोधों के लिए उपलब्ध हो सकता है।

db.users.aggregate([
     { "$unwind": "$emails" },
     { "$group": { "_id": null, emails:{$push:"$emails.address"} } },
     { "$project":{emails:true,_id:false}}
 ])

यह वापस आ जाएगा:

{ "emails" : [ "[email protected]", "[email protected]", "[email protected]" ] }




aggregation-framework