2014-04-16 3 views
84

मैं MongoDB एक सरलMongoDB COUNT का चयन करें ग्रुप द्वारा

SELECT province, COUNT(*) FROM contest GROUP BY province 

कैसे करना है पता लगाने की कोशिश के साथ चारों ओर खेल रहा हूँ लेकिन मैं एकीकृत फ़ंक्शन का उपयोग कर यह पता लगा नहीं कर पा रहे। मैं वास्तव में कुछ अजीब समूह वाक्य रचना

db.user.group({ 
    "key": { 
     "province": true 
    }, 
    "initial": { 
     "count": 0 
    }, 
    "reduce": function(obj, prev) { 
     if (true != null) if (true instanceof Array) prev.count += true.length; 
     else prev.count++; 
    } 
}); 

लेकिन वहाँ एक आसान/तेजी से एकीकृत फ़ंक्शन का उपयोग कर रास्ता है का उपयोग कर ऐसा कर सकते हैं?

db.contest.aggregate([ 
    {"$group" : {_id:"$province", count:{$sum:1}}} 
]) 
+0

इस लिंक से आपको मदद मिल सकती है http : //www.codefari.com/2015/12/group-aggregation-in-mongodb.html – Singh

उत्तर

153

यह यह करने के लिए आसान तरीका aggregate का उपयोग कर किया जाएगा समूह द्वारा, इस मॉडल का पालन करें। यहाँ मैं status और type द्वारा गिनती का आयोजन कर रहा हूँ:

db.BusinessProcess.aggregate({"$group" : {_id : {status:"$status", type: "$type"}, count : { $sum : 1} } }) 
+0

जब मैं कोशिश करता हूं तो मुझे एक त्रुटि संदेश मिलता है: "अपवाद: एक पाइपलाइन चरण विनिर्देश objec टी में बिल्कुल एक फ़ील्ड होना चाहिए। ",'? – Steven

+0

एनवीएम मैंने इसे समझ लिया, बस इसके साथ कुछ गड़बड़ की आवश्यकता है – Steven

+0

धन्यवाद, बस मुझे जो चाहिए था। – csharpbd

29

आप के लिए एकाधिक स्तंभों की जरूरत है

+0

I' मैंने इस दृष्टिकोण का उपयोग किया है। अच्छा कर रहा है। –

12

मैं एकीकृत फ़ंक्शन का परिणाम के आधार पर कुछ अतिरिक्त आपरेशन की जरूरत है। अंततः मुझे मोंगोडीबी में परिणाम के आधार पर कुल कार्य और संचालन के लिए कुछ समाधान मिला है। मेरे पास Request फ़ील्ड request, source, status, requestDate के साथ संग्रह है।

एकल फील्ड समूह & गणना द्वारा:

db.Request.aggregate([ 
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}} 
]) 

एकाधिक फील्ड्स समूह क्रमबद्ध फील्ड उपयोग करने के साथ & गणना द्वारा::

db.Request.aggregate([ 
    {"$group" : {_id:"$source", count:{$sum:1}}} 
]) 

एकाधिक फील्ड्स समूह & गणना करके

db.Request.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}, {$sort:{"_id.source":1}} ]) 

एकाधिक फील्ड्स गणना क्रमबद्ध उपयोग करने के साथ समूह & गणना द्वारा:

db.Request.aggregate([ 
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}, 
    {$sort:{"count":-1}} 
]) 
0

इसके अतिरिक्त आप उपयोग कर सकते हैं अगर आप समूहीकरण सीमित करने की जरूरत:

db.events.aggregate( 
    {$match: {province: "ON"}}, 
    {$group: {_id: "$date", number: {$sum: 1}}} 
) 
संबंधित मुद्दे