$max ऑपरेटर का उपयोग करना
किसी फ़ील्ड को केवल तभी अपडेट करने के लिए जब नया मान वर्तमान मान से बड़ा हो, $max ऑपरेटर का उपयोग करें। यह सशर्त अपडेट/अपसर्ट लागू करता है।
उदाहरण: नमूना डेटा
> db.conditionalUpdatesDemo.insertOne({"_id":100,"StudentFirstScore":89,"StudentSecondScore":78,"BiggestScore":89});
{ "acknowledged" : true, "insertedId" : 100 }
> db.conditionalUpdatesDemo.insertOne({"_id":101,"StudentFirstScore":305,"StudentSecondScore":560,"BiggestScore":1050});
{ "acknowledged" : true, "insertedId" : 101 }
> db.conditionalUpdatesDemo.insertOne({"_id":103,"StudentFirstScore":560,"StudentSecondScore":789,"BiggestScore":880});
{ "acknowledged" : true, "insertedId" : 103 }
सशर्त अपडेट: _id 100 के लिए BiggestScore को 150 पर सेट करें (केवल यदि 150 > वर्तमान मान)
> db.conditionalUpdatesDemo.update(
{ _id: 100 },
{ $max: { "BiggestScore": 150 } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
सत्यापन
> db.conditionalUpdatesDemo.find().pretty();
आउटपुट: _id 100 का BiggestScore 89 से 150 हो गया (क्योंकि 150 > 89)। _id 101 का BiggestScore 1050 अपरिवर्तित (क्योंकि 150 < 1050, लेकिन यह क्वेरी में नहीं था)।
मुख्य बिंदु:
$maxफ़ील्ड को केवल तभी अपडेट करता है जब निर्दिष्ट मान मौजूदा मान से **अधिक** हो।$minइसके विपरीत करता है (केवल यदि नया मान **कम** हो)।- अपसर्ट के साथ संयोजन:
{ upsert: true }जोड़ने पर, यदि दस्तावेज़ मौजूद नहीं है, तो यह निर्दिष्ट मान के साथ बनाया जाता है। - यह रेस कंडीशन से बचने के लिए परमाणु है (उदाहरण: हाई स्कोर ट्रैकिंग)।