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

मोंगोडीबी $setOnInsert

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 ऑपरेटर केवल उस फ़ील्ड/मान को सेट करने के लिए निर्दिष्ट करता है जब अपडेट ऑपरेशन के परिणामस्वरूप एक नया दस्तावेज़ डाला जा रहा हो (यानी एक अप्सर्ट)।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में कुल ($ मैच) और खोजने के बीच अंतर?

  2. जब फ़ील्ड का बड़ा संयोजन मौजूद है तो MongoDB में अनुक्रमणिका का सही तरीका क्या है?

  3. यदि दस्तावेज़ मौजूद है तो MongoDB सही है

  4. MongoDB - एक दस्तावेज़ बनाएँ

  5. ऑब्जेक्ट आईडी (मोंगोडब) को जावास्क्रिप्ट में स्ट्रिंग में बदलें