6

नीचे मेरा कोड दिखाएं। मुझे गणना करना है कि कितनी बार विशिष्ट मूल्य दोहराया जाता है। यहां मैंने "परिणाम" में अलग-अलग मूल्य संग्रहित किया है। मैंने गणना करने के लिए collection.count() का उपयोग किया लेकिन यह काम नहीं है। कृपया कोई मुझे बताएं कि मुझे गलती कहाँ है। आपका बहुत बहुत धन्यवाद ।MongoDB विशिष्ट मूल्य की गणना?

var DistinctIntoSingleDB = function(Collection,arr,opt,distVal,callback){ 
Collection.find({}).distinct(distVal, function(err, results) { 
     if(!err && results){ 
      console.log("Distinct Row Length :", results.length); 
      var a,arr1 = []; 
      for(var j=0; j<results.length; j++){ 
       collection.count({'V6': results[j]}, function(err, count) { 
         console.log(count) 
       }); 

       arr1.push(results[j]+ " : " +a); 
      } 
      callback(results,arr1); 
     }else{ 
      console.log(err, results); 
      callback(results); 
     } 
}); 

उत्तर

0

संग्रह 'col1' पर फ़ील्ड 'फ़ील्ड 1' के विशिष्ट मानों की घटनाओं को प्राप्त करने के लिए और एक अलग संग्रह 'विशिष्ट गणना' पर लिखें। संग्रह विशाल होने पर डिस्क स्थान का उपयोग करने की अनुमति भी दें।

db.col1.aggregate(
      [{$group: { 
       _id: "$field1", 
       count: { $sum : 1 } 
      }}, { 
      $group: { 
       _id: "$_id", 
       count: { $sum : "$count" } 
      }},{ 
       $out: "distinctCount" 
      }], 
     {allowDiskUse:true} 
) 
+0

दूसरे '$ group' वास्तव में यहाँ कुछ भी करने से नहीं है, क्योंकि यह सिर्फ एक ही' _id' मूल्य उपयोग कर रहा है, साथ ही '$ sum' के लिए एक ही उत्पादन मूल्य के माध्यम से गुजर। उसी संस्करण में '$ आउट' भी पेश किया गया था जहां डिफ़ॉल्ट '। कुल()' आउटपुट वास्तव में एक "कर्सर" है, इसलिए एक एकल बीएसओएन दस्तावेज़ में परिणामस्वरूप पिछली समस्याएं अब कोई समस्या नहीं हैं। शैल की तुलना में अन्य एपीआई बीएसओएन दस्तावेज़ में "डिफ़ॉल्ट" हो सकता है, लेकिन इसके बजाय उन्हें आसानी से "कर्सर" वापस करने के लिए बदला जा सकता है। आपको केवल '$ आउट' का उपयोग करने की आवश्यकता है जहां आप वास्तव में परिणामों के लिए एक नया संग्रह बनाने के लिए "इरादा" करते हैं। –

8

जबकि .distinct() सिर्फ एक क्षेत्र के लिए अलग-अलग मान प्राप्त करने के क्रम में, वास्तव में घटनाओं की गिनती प्राप्त करने के लिए अच्छी तरह से काम करता है, इस बेहतर aggregation framework के लिए अनुकूल है:

Collection.aggregate([ 
    { "$group": { 
     "_id": "$field", 
     "count": { "$sum": 1 } 
    }} 
],function(err,result) { 

}); 

इसके अलावा .distinct() विधि "अमूर्त" है जहां से निर्दिष्ट "विशिष्ट" फ़ील्ड वास्तव में एक सरणी के भीतर है। इस मामले में आप यहाँ सरणी तत्वों पर कार्रवाई करने के $unwind पहले कॉल करने की आवश्यकता:

Collection.aggregate([ 
    { "$unwind": "$array" }, 
    { "$group": { 
     "_id": "$array.field", 
     "count": { "$sum": 1 } 
    }} 
],function(err,result) { 

}); 

तो मुख्य काम मूल रूप से फ़ील्ड मान के "समूह" है, जो के रूप में "अलग ही बात का मतलब द्वारा $group में किया जाता है "। $sum एक समूह ऑपरेटर है जो इस मामले में उस संग्रह के लिए फ़ील्ड में उस मान की प्रत्येक घटना के लिए 1 जोड़ता है।

संबंधित मुद्दे