2012-05-16 23 views
16

कृपया मेरी मदद करो MongoDB को यह चयन वाक्य कन्वर्ट करने के लिए मैक्स का चयन करें() के साथ() विधि के बजाय SUM() उस दस्तावेज़ के रूप में।"द्वारा समूह" MongoDB में

धन्यवाद।

+0

की कोशिश की नहीं, 'को कम: समारोह (obj, पिछला) {अगर (prev.c

उत्तर

1

चूंकि मोंगोडीबी नीचे काम करने वाले मानचित्र का समर्थन करता है।

db.employee.insert({name:"Tejas",Value:2}) 
db.employee.insert({name:"Tejas",Value:3}) 
db.employee.insert({name:"Varma",Value:1}) 
db.employee.insert({name:"Varma",Value:6}) 

var map=function(){ 
var key={name:this.name}; 
var value={value:this.Value}; 
emit(key,value); 
}; 

var reduce=function(key,values){ 
var max=-1; 
values.forEach(function(value){ 
      if(max==-1){ 
     max=value['value']; 
    } 
    if(max<value['value']){ 
     max=value['value']; 
    } 
}); 
return {max:max}; 
}; 

db.employee.mapReduce (नक्शा, को कम करने, {बाहर: {इनलाइन: 1}});

+0

आपको बहुत धन्यवाद – spidermanit

21

मैंने निम्नानुसार मोंगो संग्रह बनाया है।

{ "_id" : ObjectId("4fb36bfd3d1c88bfa15103b1"), "name" : "bob", "value" : 5 } 
{ "_id" : ObjectId("4fb36c033d1c88bfa15103b2"), "name" : "bob", "value" : 3 } 
{ "_id" : ObjectId("4fb36c063d1c88bfa15103b3"), "name" : "bob", "value" : 7 } 
{ "_id" : ObjectId("4fb36c0c3d1c88bfa15103b4"), "name" : "john", "value" : 2 } 
{ "_id" : ObjectId("4fb36c103d1c88bfa15103b5"), "name" : "john", "value" : 4 } 
{ "_id" : ObjectId("4fb36c143d1c88bfa15103b6"), "name" : "john", "value" : 8 } 
{ "_id" : ObjectId("4fb36c163d1c88bfa15103b7"), "name" : "john", "value" : 6 } 

फिर अपने नाम और अधिकतम (मूल्य)

db.table1.group(
    {key: {name:true}, 
     reduce: function(obj,prev) { 
      if (prev.maxValue < obj.value) { 
       prev.maxValue = obj.value; 
      } 
     }, 
    initial: { maxValue: 0 }} 
); 

द्वारा निम्नलिखित कोड मैं समूह यह का उपयोग करके परिणाम के रूप में

[ 
    { 
     "name" : "bob", 
     "maxValue" : 7 
    }, 
    { 
     "name" : "john", 
     "maxValue" : 8 
    } 
] 

यह एकत्रीकरण के साथ बहुत सरल है दिखाया गया है ढांचा। आप समेकन ढांचे का उपयोग करके निम्नलिखित कोड के साथ एक ही परिणाम प्राप्त कर सकते हैं।

db.table1.aggregate(
    {$group:{_id:"$name", "maxValue": {$max:"$value"}}} 
); 
+4

आपको धन्यवाद। – spidermanit

+0

हाय परवीन। क्या यह विधि अधिकतम तारीख की जांच करने के लिए संभव है, मेरा मतलब नवीनतम तारीख है? – spidermanit

+0

देर से प्रतिक्रिया के लिए खेद है। हां इस विधि के साथ तिथियों की तुलना करना भी संभव है। आपको obj.date के साथ obj.date को प्रतिस्थापित करने की आवश्यकता है –

16

एकत्रीकरण फ्रेमवर्क का उपयोग करना:

db.table1.aggregate({$group:{'_id':'$name', 'max':{$max:'$value'}}}, 
{$sort:{'max':1}}).result 
0
var myresult = db.table1.aggregate([        
          { $group: 
            _id:"$Name",                  
            value: { $max: "$Value" } 
           } 
          } 
          ]); 
print(myresult) 
संबंधित मुद्दे