2013-07-30 4 views
6

की लंबाई से समूह के लिए उपयोग MongoDB एकत्रीकरण ढांचे मैं एक संग्रह है कि कुछ इस तरह दिखता है एक हिस्टोग्राम परिणाम के साथ जो बताता है कि कितने उपयोगकर्ताओं को saved_things की निश्चित गणना है।सरणी

{ "_id": 1, "count": 2 }, 
{ "_id": 3, "count": 1 } 

मैं नीचे एक की तरह कुल कार्यों के विभिन्न संयोजनों की कोशिश की है, लेकिन कोई भी सही ढंग से काम किया है: उदाहरण के लिए, डेटासेट के लिए यह कुछ की तरह वापसी कर सकता है इसके बाद के संस्करण। (मैं लग रहा है कि मैं इस बारे में बहुत गलत जा रहा हूँ मिलता है।)

collection.aggregate([ 
    { $unwind: "$saved_things" }, 
    { $group: "$_id", count: { $sum: 1 } } }, 
    { $group: "$count", number: { $sum: 1 } } }, 
    { $sort: { number: -1 } } 
], function(err, result) { 
    console.log(result); 
}); 

मोंगो की कुल ढांचे के साथ यह संभव है या मैं एक नक्शे के साथ बंद बेहतर होगा समारोह को कम?

+0

क्या आपके साथ इसका मतलब है कि कितने उपयोगकर्ताओं को save_things subcollectin_ की निश्चित गणना है? 'Saved_thing' को देखते हुए, आप जानना चाहते हैं कि किन उपयोगकर्ताओं के पास' saved_things' है और कितना? क्या वह? –

+0

हम्म मेरा शब्द भ्रमित प्रतीत होता है, इसके बारे में खेद है! मुझे लगता है कि उदाहरण आउटपुट सबसे अच्छा वर्णन करता है कि मैं क्या देख रहा हूं, लेकिन मैं इसे फिर से वर्णन करने की कोशिश करूंगा। मैं संग्रह में प्रत्येक उपयोगकर्ता के लिए 'saved_things' में ऑब्जेक्ट्स की संख्या प्राप्त करना चाहता हूं और उस गणना की आवृत्ति को जोड़ना चाहता हूं। यह उपयोगकर्ताओं की 'saved_things' की संख्या का हिस्टोग्राम उत्पन्न करने के लिए है (यदि यह समझ में आता है)। मुझे बताएं कि क्या यह अभी भी किसी भी तरह से भ्रमित है। –

उत्तर

5

ठीक है, समझ गया! ये रहा। दस्तावेज़ _id द्वारा

{ 
    $unwind: "$saved_things" 
}, 
{ 
    $group: { 
     _id: "$_id", 
     size: { 
      $sum: 1 
     } 
    } 
}, 
{ 
    $group: { 
     _id: "$size", 
     frequency: { 
      $sum: 1 
     } 
    } 
}, 
{ 
    $project: { 
     size: "$_id", 
     frequency: 1, 
     _id: 0 
    } 
} 

खोलना saved_things सरणी, तो समूह और यह गिनती, इस प्रकार हम सरणी आकार को प्राप्त कर सकते हैं: एकत्रीकरण पाइप लाइन मूल रूप से है। अब आसान है, size द्वारा समूह और आवृत्ति गिनती है। _id फ़ील्ड को size पर पुनर्नामित करने के लिए प्रोजेक्ट का उपयोग करें।

+0

ऐसा लगता है कि यह वास्तव में करीब है। मैं इसे आउटपुट के रूप में प्राप्त कर रहा हूं: https://gist.github.com/stevenleeg/2b1a2ee9c5400f5f3089 –

+0

बस मजाक कर रहा है! मैं 'परिणाम' की बजाय 'परिणाम' को प्रतिबिंबित कर रहा था जिससे समस्या उत्पन्न हुई। एकमात्र चीज जो मैं देखता हूं वह काफी काम नहीं कर रहा है कि आवृत्ति 0. के लिए कोई डेटा नहीं है। क्या इसके बारे में कुछ भी किया जा सकता है? –

+0

मुझे विश्वास नहीं है कि इस समेकन में शून्य लंबाई सरणी वाले दस्तावेज़ों के लिए आवृत्ति मान शामिल होगा। एक मिनट के लिए मेरे सिर खरोंच कर रहा था कि क्यों मेरी आवृत्ति योग मेरे विशेष संग्रह गिनती से मेल नहीं खाती। – steveinatorx