MongoDB में $max
है ऑपरेटर जो आपको किसी फ़ील्ड के मान को केवल तभी अपडेट करने की अनुमति देता है जब निर्दिष्ट मान फ़ील्ड के वर्तमान मान से अधिक हो।
दूसरे शब्दों में, यदि $max
मान दस्तावेज़ में वर्तमान मान से अधिक है, $max
मूल्य का प्रयोग किया जाता है। अन्यथा, दस्तावेज़ का मूल्य अपरिवर्तित रहता है।
उदाहरण
मान लीजिए हमारे पास इस तरह का एक संग्रह है:
{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 230 } { "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 } { "_id" : 3, "exercise" : "squat", "bestLift" : 210 }
और कल्पना करें कि हम प्रत्येक कसरत के बाद नवीनतम लिफ्टों के बिना संग्रह को अपडेट करते हैं। इस मामले में, हम केवल bestLift
. चाहते हैं यदि हमारी नवीनतम लिफ्ट हमारी पिछली सर्वश्रेष्ठ लिफ्ट (यानी संबंधित लिफ्ट के लिए सूचीबद्ध वर्तमान भार) से भारी थी, तो फ़ील्ड को अपडेट किया जाएगा।
इस मामले में हम $max
. का उपयोग कर सकते हैं उस परिणाम को प्राप्त करने के लिए ऑपरेटर।
उदाहरण:
db.workout.update(
{ _id: 1 },
{ $max: { bestLift: 240 } }
)
आउटपुट:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
यह संदेश हमें बताता है कि एक दस्तावेज़ का मिलान हुआ और उसे अपडेट किया गया।
आइए फिर से संग्रह की जाँच करें।
db.workout.find()
परिणाम:
{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 } { "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 } { "_id" : 3, "exercise" : "squat", "bestLift" : 210 }
हम देख सकते हैं कि bestLift
पहले दस्तावेज़ के लिए फ़ील्ड को नए मान के साथ अद्यतन किया गया था। ऐसा इसलिए है क्योंकि 240 इसके पिछले मान 230 से अधिक है।
जब मान कम हो
जब मान $max
. के साथ निर्दिष्ट किया गया हो दस्तावेज़ में मौजूदा मान से कम है, कुछ भी अपडेट नहीं किया गया है।
उदाहरण:
db.workout.update(
{ _id: 1 },
{ $max: { bestLift: 220 } }
)
आउटपुट:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
हम संदेश से देख सकते हैं कि कुछ भी अपडेट नहीं किया गया था।
आइए फिर से संग्रह की जाँच करें।
db.workout.find()
परिणाम:
{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 } { "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 } { "_id" : 3, "exercise" : "squat", "bestLift" : 210 }
हम देख सकते हैं कि मान 240 पर बना हुआ है, भले ही हमने इसे 220 में अपडेट करने का प्रयास किया। यह अपेक्षित है, क्योंकि हमने $max
का उपयोग किया है ।
तारीख
आप $max
. का उपयोग कर सकते हैं दिनांक फ़ील्ड पर।
मान लीजिए हमारे पास एक collection
है निम्नलिखित दस्तावेज़ के साथ सदस्यता कहा जाता है:
{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") }
आइए उस तारीख के साथ तारीख को अपडेट करने का प्रयास करें जो दस्तावेज़ में वर्तमान तिथि से पहले की है।
db.subscriptions.update(
{ _id: 1 },
{ $max: { expiry: new Date("2020-01-01") } }
)
यहां, हम वर्ष को 2021
. से अपडेट करने का प्रयास करते हैं करने के लिए 2020
. यह देखते हुए कि नई तारीख मौजूदा तारीख से पहले है, हमें निम्नलिखित मिलते हैं।
db.subscriptions.find()
परिणाम:
{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") }
जैसी कि उम्मीद थी, कुछ भी अपडेट नहीं किया गया।
आइए इसे बाद की तारीख के साथ अपडेट करने का प्रयास करें।
db.subscriptions.update(
{ _id: 1 },
{ $max: { expiry: new Date("2022-01-01") } }
)
आउटपुट:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
हम संदेश से देख सकते हैं कि दस्तावेज़ अपडेट किया गया था।
आइए देखें।
db.subscriptions.find()
परिणाम:
{ "_id" : 1, "expiry" : ISODate("2022-01-01T00:00:00Z") }
तारीख को उम्मीद के मुताबिक अपडेट किया गया था।