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

MongoDB में अप्सर्ट करने के लिए गाइड

1. अवलोकन

अप्सर्ट इन्सर्ट और अपडेट का एक संयोजन है (inSERT + UPdate =upsert)। हम अपसर्ट . का उपयोग कर सकते हैं विभिन्न अद्यतन विधियों के साथ, अर्थात, अपडेट , findAndModify , और प्रतिस्थापित करें

यहाँ MongoDB में, अपरर्ट विकल्प एक बूलियन है मूल्य। मान लीजिए मान सत्य . है और दस्तावेज़ निर्दिष्ट क्वेरी फ़िल्टर से मेल खाते हैं। उस स्थिति में, लागू अद्यतन कार्रवाई दस्तावेज़ों को अद्यतन करेगी। अगर मान सत्य है और कोई दस्तावेज़ शर्त से मेल नहीं खाता, यह विकल्प संग्रह में एक नया दस्तावेज़ सम्मिलित करता है। नए दस्तावेज़ में फ़िल्टर और लागू संचालन के आधार पर फ़ील्ड शामिल होंगे।

इस ट्यूटोरियल में, हम सबसे पहले अपसर्ट . को देखेंगे MongoDB शेल क्वेरी में और फिर Java ड्राइवर कोड का उपयोग करें।

2. डेटाबेस इनिशियलाइज़ेशन

इससे पहले कि हम अप्सर्ट . करने के लिए आगे बढ़ें संचालन, पहले हमें एक नया डेटाबेस स्थापित करने की आवश्यकता है baeldung और एक नमूना संग्रह, वाहन :

db.vehicle.insertMany([
{
    "companyName":"Nissan", 
    "modelName":"GTR",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"EPS 5561"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"LLS 6899"
},
{
    "companyName":"Honda",
    "modelName":"Gold Wing",
    "launchYear":2018,
    "type":"Bike",
    "registeredNo":"LKS 2477"
}]);

सफल इंसर्शन के मामले में, उपरोक्त कमांड नीचे दिखाए गए के समान एक JSON प्रिंट करेगा:

{
    "acknowledged" : true, 
    "insertedIds" : [
        ObjectId("623c1db39d55d4e137e4781b"),
	ObjectId("623c1db39d55d4e137e4781c"),
	ObjectId("623c1db39d55d4e137e4781d")
    ]
}

हमने डमी डेटा को संग्रह वाहन . में सफलतापूर्वक जोड़ दिया है ।

3. अपडेट . का उपयोग करना विधि

इस खंड में, हम अपसर्ट . का उपयोग करना सीखेंगे अपडेट . के साथ विकल्प तरीका। अपरर्ट का मुख्य उद्देश्य विकल्प लागू फ़िल्टर के आधार पर मौजूदा दस्तावेज़ को अद्यतन करना है या यदि फ़िल्टर मेल नहीं खाता है तो एक नया दस्तावेज़ सम्मिलित करना है

उदाहरण के तौर पर, हम $setOnInsert . का उपयोग करेंगे अप्सर्ट . के साथ ऑपरेटर दस्तावेज़ में नए फ़ील्ड डालने पर अतिरिक्त लाभ प्राप्त करने का विकल्प।

आइए एक क्वेरी देखें जिसमें फ़िल्टर की स्थिति संग्रह के मौजूदा दस्तावेज़ से मेल खाती है:

db.vehicle.update(
{
    "modelName":"X5"
},
{
    "$set":{
        "companyName":"Hero Honda"
    }
},
{
    "upsert":true
});

उपरोक्त क्वेरी निम्नलिखित दस्तावेज़ लौटाएगी:

{ 
    "nMatched" : 1, 
    "nUpserted" : 0,
    "nModified" : 1 
}

यहाँ, हम उपरोक्त मोंगो शेल क्वेरी के अनुरूप जावा ड्राइवर कोड देखेंगे:

UpdateOptions options = new UpdateOptions().upsert(true);
UpdateResult updateResult = collection.updateOne(Filters.eq("modelName", "X5"), 
  Updates.combine(Updates.set("companyName", "Hero Honda")), options);
System.out.println("updateResult:- " + updateResult);

उपरोक्त क्वेरी में, फ़ील्ड मॉडलनाम संग्रह में "X5" पहले से मौजूद है, इसलिए फ़ील्ड companyName उस दस्तावेज़ को "हीरो होंडा" में अपडेट किया जाएगा।

आइए अब अपसर्ट . का एक उदाहरण देखें $setOnInsert . का उपयोग करके विकल्प ऑपरेटर। यह केवल एक नया दस्तावेज़ जोड़ने के मामले में लागू होगा:

db.vehicle.update(
{
    "modelName":"GTPR"
},
{
    "$set":{
        "companyName":"Hero Honda"
    },
    "$setOnInsert":{
        "launchYear" : 2022,
	"type" : "Bike",
	"registeredNo" : "EPS 5562"
    },  
},
{
    "upsert":true
});

उपरोक्त क्वेरी निम्नलिखित दस्तावेज़ लौटाएगी:

{
    "nMatched" : 0,
    "nUpserted" : 1,
    "nModified" : 0,
    "_id" : ObjectId("623b378ed648af670fe50e7f")
}

उपरोक्त अद्यतन क्वेरी का जावा ड्राइवर कोड $setOnInsert . के साथ विकल्प होगा:

UpdateResult updateSetOnInsertResult = collection.updateOne(Filters.eq("modelName", "GTPR"),
  Updates.combine(Updates.set("companyName", "Hero Honda"),
  Updates.setOnInsert("launchYear", 2022),
  Updates.setOnInsert("type", "Bike"),
  Updates.setOnInsert("registeredNo", "EPS 5562")), options);
System.out.println("updateSetOnInsertResult:- " + updateSetOnInsertResult);

यहां, उपरोक्त क्वेरी में, modelName field फ़ील्ड की फ़िल्टर स्थिति “GTPR” किसी संग्रह दस्तावेज़ से मेल नहीं खाता, इसलिए हम संग्रह में एक नया दस्तावेज़ जोड़ेंगे। ध्यान देने वाली मुख्य बात यह है कि $setOnInsert सभी फ़ील्ड को नए दस्तावेज़ में जोड़ता है।

4. findAndModify . का उपयोग करना विधि

हम अपसर्ट . का भी उपयोग कर सकते हैं findAndModify . का उपयोग करके विकल्प तरीका। इस विधि के लिए, अप्सर्ट . का डिफ़ॉल्ट मान विकल्प गलत है . अगर हम अपसर्ट . सेट करते हैं सत्य . का विकल्प , यह ठीक उसी तरह से प्रदर्शन करेगा जैसे अपडेट विधि।

आइए findAndModify . के उपयोग के मामले की जांच करें अपरर्ट . के साथ विधि विकल्प सत्य :

db.vehicle.findAndModify(
{
    query:{
        "modelName":"X7"
    },
    update: {
        "$set":{
            "companyName":"Hero Honda"
        }
    },
    "upsert":true,
    "new":true
});

इस मामले में, उपरोक्त क्वेरी नए बनाए गए दस्तावेज़ को वापस कर देगी। आइए उपरोक्त क्वेरी के जावा ड्राइवर कोड को देखें:

FindOneAndUpdateOptions upsertOptions = new FindOneAndUpdateOptions();
  upsertOptions.returnDocument(ReturnDocument.AFTER);
  upsertOptions.upsert(true);
Document resultDocument = collection.findOneAndUpdate(Filters.eq("modelName", "X7"),
  Updates.set("companyName", "Hero Honda"), upsertOptions);
System.out.println("resultDocument:- " + resultDocument);

यहां, हमने पहले फ़िल्टर शर्त बनाई और उसके आधार पर, या तो हम मौजूदा दस्तावेज़ को अपडेट करेंगे या संग्रह में एक नया दस्तावेज़ जोड़ेंगे वाहन

5. प्रतिस्थापित करें . का उपयोग करना विधि

आइए अप्सर्ट करते हैं replaceOne . का उपयोग करके संचालन तरीका। प्रतिस्थापित करें MongoDB की विधि केवल स्थिति से मेल खाने पर संग्रह के भीतर एकल दस्तावेज़ को बदल देती है।

सबसे पहले, आइए बदलें विधि की मोंगो शेल क्वेरी देखें:

db.vehicle.replaceOne(
{
    "modelName":"GTPR"
},
{
    "modelName" : "GTPR",
    "companyName" : "Hero Honda",
    "launchYear" : 2022,
    "type" : "Bike",
    "registeredNo" : "EPS 5562"
},
{
    "upsert":true
});

उपरोक्त क्वेरी निम्नलिखित प्रतिक्रिया लौटाएगी:

{ 
    "acknowledged" : true, 
    "matchedCount" : 1,
    "modifiedCount" : 1 
}

अब, जावा ड्राइवर कोड का उपयोग करके उपरोक्त क्वेरी को लिखते हैं:

Document replaceDocument = new Document();
replaceDocument.append("modelName", "GTPP")
  .append("companyName", "Hero Honda")
  .append("launchYear", 2022)
  .append("type", "Bike")
  .append("registeredNo", "EPS 5562");
UpdateResult updateReplaceResult = collection.replaceOne(Filters.eq("modelName", "GTPP"), replaceDocument, options);
System.out.println("updateReplaceResult:- " + updateReplaceResult);

यहां, इस मामले में, हमें पहले एक नया दस्तावेज़ बनाने की आवश्यकता है जिसके द्वारा हम मौजूदा दस्तावेज़ को बदलना चाहते हैं, और अप्सर्ट के साथ विकल्प सत्य , हम दस्तावेज़ को तभी बदलेंगे जब शर्त का मिलान हो जाएगा।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. SQL में अल्पविराम के साथ संख्याओं को कैसे प्रारूपित करें

  2. नेवला मॉडल की सभी गिनती कैसे प्राप्त करें?

  3. नेवला मॉडल से स्कीमा विशेषताएँ प्राप्त करना

  4. mongoose.js क्वेरीज़ को समकालिक रूप से चलाना

  5. MongoDB $ दौर बनाम $ ट्रंक:क्या अंतर है?