MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB:2 नेस्टेड सरणियों के साथ एक दस्तावेज़ में एक औसत अद्यतन कर रहा है

आप aggregation . का उपयोग नहीं कर सकते किसी दस्तावेज़ को अपडेट करने के लिए, लेकिन आप उस डेटा को प्राप्त करने के लिए निश्चित रूप से इसका उपयोग कर सकते हैं जिसे आप अपडेट के लिए उपयोग करना चाहते हैं। सबसे पहले, मैंने देखा कि कुछ {} हैं आपके grade . के आसपास गुम है grade के अंदर वस्तु सरणी। आप दोबारा जांचना चाहेंगे कि आपकी दस्तावेज़ संरचना पोस्ट की गई है। दूसरे, आपकी एकत्रीकरण क्वेरी में कुछ समस्याएं हैं।

  1. $avg ऑपरेटर एक $group . के अंदर काम करता है क्लॉज, न कि $project
  2. जब आप $avg का उपयोग करते हैं , आपको $sum . का उपयोग करने की आवश्यकता नहीं है ।
  3. आप औसत करना चाहते हैं trucks.grades.grade.grade_number , जो वास्तव में ग्रेड का अंकीय मान रखता है। यानी, आप grade . खो रहे हैं grade . के बीच और grade_number

यदि आप उन समस्याओं का समाधान करते हैं, तो आपको निम्न के जैसा एक प्रश्न प्राप्त होता है:

db.col.aggregate([ 
    { "$unwind": "$trucks" }, 
    { "$unwind": "$trucks.grades" }, 
    { "$group":
        { 
            "_id": "$trucks.truck_id", 
            "average_grade": { "$avg": "$trucks.grades.grade_number" } 
        } 
    }
]);

आपके नमूना दस्तावेज़ के लिए, जो लौटाता है:

{ "_id" : "TEB5572", "average_grade" : 4 }
{ "_id" : "TEB7622", "average_grade" : 4 }

अब आप इस जानकारी का उपयोग average_grade . को अपडेट करने के लिए कर सकते हैं खेत। यदि आप MongoDB संस्करण 2.6 या उच्चतर का उपयोग कर रहे हैं, तो aggregate विधि एक कर्सर लौटाएगी। आप उस कर्सर के माध्यम से पुनरावृति कर सकते हैं और तदनुसार दस्तावेज़ों को अपडेट कर सकते हैं।

इस उदाहरण में, मैं उन दस्तावेज़ों की खोज करता हूं जिनमें एक विशेष truck_id . है उनके trucks . के अंदर सरणी और average_grade को अपडेट करने के लिए आगे बढ़ें एकत्रीकरण क्वेरी द्वारा गणना की गई एक के साथ। आप अपनी आवश्यकताओं के अनुरूप इसे संशोधित कर सकते हैं। एग्रीगेशन क्वेरी के साथ, कोड इस तरह दिखता है।

// Get average grade for each truck and assign results to cursor.
var cur = db.col.aggregate([ 
    { "$unwind": "$trucks" }, 
    { "$unwind": "$trucks.grades" }, 
    { "$group":
        { 
            "_id": "$trucks.truck_id", 
            "average_grade": { "$avg": "$trucks.grades.grade_number" } 
        } 
    }
]);

// Iterate through results and update average grade for each truck.
while (cur.hasNext()) {
    var doc = cur.next();
    db.col.update({ "trucks.truck_id": doc._id },
                  { "$set": { "trucks.$.average_grade": doc.average_grade }},
                  { "multi": true});
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं MongoDB में एम्बेडेड दस्तावेज़ों के लिए अद्वितीय आईडी कैसे बना सकता हूं?

  2. उल्का फ़ाइल को mongodb पर अपलोड करें

  3. मोंगोडीबी को मोबाइल या ब्राउज़र आधारित एप्लिकेशन से जोड़ना

  4. मोंगोडीबी सिएटल 2014

  5. मोंगो क्वेरी एक सरणी के भीतर एक नेस्टेड फ़ील्ड।