MongoDB $setOnInsert
फ़ील्ड अपडेट ऑपरेटर का उपयोग अप्सर्ट के दौरान एक विशिष्ट मान डालने के लिए किया जा सकता है।
यदि एक अद्यतन कार्रवाई के परिणामस्वरूप एक नया दस्तावेज़ सम्मिलित किया जा रहा है (अर्थात एक अप्सर्ट), तो $setOnInsert
ऑपरेटर प्रभावी होता है, अन्यथा इसका कोई प्रभाव नहीं पड़ता है।
उदाहरण
मान लीजिए हमारे पास dogs
. नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }
और हम निम्नलिखित update()
चलाते हैं उस दस्तावेज़ को अद्यतन करने का आदेश जो संग्रह में मौजूद नहीं है:
db.dogs.update(
{ _id: 2 },
{
$set: { weight: 50, height: 40 },
$setOnInsert: { name: "Bark" }
},
{ upsert: true }
)
इसका परिणाम निम्न आउटपुट में होगा:
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 2 })
जो हमें बताता है कि एक दस्तावेज़ को हटा दिया गया था।
आइए संग्रह की जाँच करें:
db.dogs.find()
परिणाम:
{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 } { "_id" : 2, "height" : 40, "name" : "Bark", "weight" : 50 }
हम देख सकते हैं कि दस्तावेज़ 2 डाला गया है, और इसमें वह फ़ील्ड/मान शामिल है जो हमने $setOnInsert
के लिए प्रदान किया था ऑपरेटर (यानी name: "Bark"
)।
जब दस्तावेज़ मौजूद होता है (यानी कोई अप्सर्ट नहीं)
आइए अब उस दस्तावेज़ को अपडेट करने का प्रयास करें जिसे हमने अभी-अभी ऊपर किया है। आइए पिछले उदाहरण के समान कथन का उपयोग करें, लेकिन विभिन्न मानों के साथ।
db.dogs.update(
{ _id: 2 },
{
$set: { weight: 55, height: 45 },
$setOnInsert: { name: "Fluffy" }
},
{ upsert: true }
)
आउटपुट:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
इस बार, एक दस्तावेज़ का मिलान हुआ और उसे अपडेट किया गया। कुछ भी नहीं डाला गया था।
आइए फिर से संग्रह की जाँच करें।
db.dogs.find()
परिणाम:
{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 } { "_id" : 2, "height" : 45, "name" : "Bark", "weight" : 55 }
तो इस मामले में, weight
और height
फ़ील्ड अपडेट किए गए थे, लेकिन name
फ़ील्ड नहीं था।
नाम फ़ील्ड को अपडेट नहीं करने का कारण यह है कि अपरर्ट नहीं किया जा रहा था। $setOnInsert
ऑपरेटर केवल उस फ़ील्ड/मान को सेट करने के लिए निर्दिष्ट करता है जब अपडेट ऑपरेशन के परिणामस्वरूप एक नया दस्तावेज़ डाला जा रहा हो (यानी एक अप्सर्ट)।