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

MongoDB दस्तावेज़ में एकाधिक फ़ील्ड अपडेट करें

1. अवलोकन

MongoDB एक दस्तावेज़-उन्मुख NoSQL डेटाबेस है जो सार्वजनिक रूप से उपलब्ध है। हम विभिन्न तरीकों जैसे अपडेट . का उपयोग करके संग्रह में दस्तावेज़ों को अपडेट कर सकते हैं , प्रतिस्थापित करें और सहेजें . दस्तावेज़ के किसी विशिष्ट फ़ील्ड को बदलने के लिए, हम $set . जैसे विभिन्न ऑपरेटरों का उपयोग करेंगे , $inc, आदि.

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

आइए अब उद्देश्य को प्राप्त करने के लिए विभिन्न तरीकों पर गौर करें।

2. अलग-अलग फ़ील्ड अपडेट करने के लिए शेल क्वेरी

शुरू करने से पहले, आइए पहले एक नया डेटाबेस बनाएं, baeldung , और एक नमूना संग्रह, कर्मचारी . हम सभी उदाहरणों में इस संग्रह का उपयोग करेंगे:

use baeldung;
db.createCollection(employee);

आइए अब insertMany . का उपयोग करके इस संग्रह में कुछ दस्तावेज़ जोड़ें क्वेरी:

db.employee.insertMany([
    {
        "employee_id": 794875,
        "employee_name": "David Smith",
        "job": "Sales Representative",
        "department_id": 2,
        "salary": 20000,
        "hire_date": NumberLong("1643969311817")
    },
    {
        "employee_id": 794876,
        "employee_name": "Joe Butler",
        "job": "Sales Manager",
        "department_id": 3,
        "salary": 30000,
        "hire_date": NumberLong("1645338658000")
    }
]);

परिणामस्वरूप, हम दोनों दस्तावेज़ों के लिए ObjectId के साथ JSON प्राप्त करेंगे जैसा कि नीचे दिखाया गया है:

{
    "acknowledged": true,
    "insertedIds": [
        ObjectId("6211e034b76b996845f3193d"),
        ObjectId("6211e034b76b996845f3193e")
        ]
}

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

2.1. एक दस्तावेज़ के एकाधिक फ़ील्ड अपडेट करें

हम $सेट . का उपयोग कर सकते हैं और $inc ऑपरेटरों MongoDB में किसी भी क्षेत्र को अद्यतन करने के लिए। $सेट ऑपरेटर नया निर्दिष्ट मान सेट करेगा जबकि $inc ऑपरेटर एक निर्दिष्ट मूल्य से मूल्य में वृद्धि करेगा।

आइए पहले $set का उपयोग करके कर्मचारी संग्रह के दो क्षेत्रों को अपडेट करने के लिए MongoDB क्वेरी देखें। ऑपरेटर:

db.employee.updateOne(
    {
        "employee_id": 794875,
        "employee_name": "David Smith"
    },
    {
        $set:{
            department_id:3,
            job:"Sales Manager"
        }
    }
);

उपरोक्त क्वेरी में, कर्मचारी_आईडी और कर्मचारी_नाम फ़ील्ड का उपयोग दस्तावेज़ और $set . को फ़िल्टर करने के लिए किया जाता है ऑपरेटर का उपयोग नौकरी . को अपडेट करने के लिए किया जाता है और विभाग_आईडी फ़ील्ड।

हम $सेट . का भी उपयोग कर सकते हैं और $inc एक ही अद्यतन क्वेरी में ऑपरेटर एक साथ:

db.employee.updateOne(
    {
        "employee_id": 794875
    },
    {
        $inc: {
            department_id: 1
        },
        $set: {
            job: "Sales Manager"
        }
    }
);

यह नौकरी को अपडेट करेगा बिक्री प्रबंधक को फ़ील्ड करें और विभाग_आईडी बढ़ाएं द्वारा 1.

2.2. एकाधिक दस्तावेज़ों के एकाधिक फ़ील्ड अपडेट करें

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

db.employee.update(
    {
        "job": "Sales Representative"
    },
    {
        $inc: { 
            salary: 10000
        }, 
        $set: { 
            department_id: 5
        }
    },
    {
        multi: true 
    }
);

वैकल्पिक रूप से, हम updateMany . का उपयोग करके समान परिणाम प्राप्त करेंगे क्वेरी:

db.employee.updateMany(
    {
        "job": "Sales Representative"
    },
    {
        $inc: {
            salary: 10000
        },
        $set: {
            department_id: 5
        }
    }
);

उपरोक्त क्वेरी में, हमने updateMany . का उपयोग किया है संग्रह के 1 से अधिक दस्तावेज़ों को अद्यतन करने की विधि।

2.3. एकाधिक फ़ील्ड अपडेट करते समय सामान्य समस्या

अब तक, हमने दो अलग-अलग ऑपरेटरों को प्रदान करके या एक से अधिक फ़ील्ड पर एक ही ऑपरेटर का उपयोग करके अपडेट क्वेरी का उपयोग करके कई फ़ील्ड को अपडेट करना सीखा है।

अब, यदि हम एक ही क्वेरी में विभिन्न क्षेत्रों के साथ एक ऑपरेटर का कई बार उपयोग करते हैं, तो MongoDB केवल अद्यतन क्वेरी के अंतिम विवरण को अपडेट करेगा और बाकी को अनदेखा करें:

db.employee.updateMany(
    {
        "employee_id": 794875
    },
    {
        $set: {
            department_id: 3
        },
        $set: {
            job:"Sales Manager"
        }
    }
);

उपरोक्त क्वेरी इसके समान आउटपुट लौटाएगी:

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

इस मामले में, केवल नौकरी "बिक्री प्रबंधक" में अपडेट किया जाएगा। विभाग_आईडी मान को 3 में अपडेट नहीं किया जाएगा।

3. Java ड्राइवर के साथ फ़ील्ड अपडेट करें

अब तक, हमने कच्चे MongoDB प्रश्नों पर चर्चा की है। आइए अब जावा का उपयोग करके समान संचालन करें। MongoDB जावा ड्राइवर MongoDB दस्तावेज़ का प्रतिनिधित्व करने के लिए दो वर्गों का समर्थन करता है, com.mongodb.BasicDBObject और org.bson.Document. हम किसी दस्तावेज़ में फ़ील्ड अपडेट करने के लिए दोनों विधियों पर गौर करेंगे।

आगे बढ़ने से पहले, आइए पहले कर्मचारी . से जुड़ें बेलडंग . के अंदर संग्रह डीबी:

MongoClient mongoClient = new MongoClient(new MongoClientURI("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("baeldung");
MongoCollection<Document> collection = database.getCollection("employee");

यहाँ हमने मान लिया है कि MongoDB 27017 के डिफ़ॉल्ट पोर्ट पर स्थानीय रूप से चल रहा है।

3.1. DBObject का उपयोग करना

MongoDB में दस्तावेज़ बनाने के लिए, हम com.mongodb. का उपयोग करेंगे। DBObject इंटरफ़ेस और इसका कार्यान्वयन वर्ग com.mongodb.BasicDBObject

DBObject . का क्रियान्वयन कुंजी-मूल्य जोड़े पर आधारित है। BasicDBObject LinkedHashMap . से इनहेरिट किया गया है क्लास जो उपयोग . में है पैकेज।

आइए अब com.mongodb.BasicDBObject . का उपयोग करें कई क्षेत्रों में अद्यतन कार्रवाई करने के लिए:

BasicDBObject searchQuery = new BasicDBObject("employee_id", 794875);
BasicDBObject updateFields = new BasicDBObject();
updateFields.append("department_id", 3);
updateFields.append("job", "Sales Manager");
BasicDBObject setQuery = new BasicDBObject();
setQuery.append("$set", updateFields);
UpdateResult updateResult = collection.updateMany(searchQuery, setQuery);

यहां, सबसे पहले, हमने कर्मचारी_आईडी के आधार पर एक फ़िल्टर क्वेरी बनाई। यह ऑपरेशन दस्तावेजों का एक सेट लौटाएगा। इसके अलावा, हमने विभाग_आईडी . का मान अपडेट किया है और नौकरी सेट क्वेरी के अनुसार।

3.2. bson का उपयोग करना दस्तावेज़

हम bson . का उपयोग करके सभी MongoDB संचालन कर सकते हैं दस्तावेज़। उसके लिए, पहले हमें संग्रह वस्तु की आवश्यकता है और फिर updateMany का उपयोग करके अद्यतन कार्रवाई करें। फ़िल्टर . के साथ विधि और सेट कार्य।

UpdateResult updateQueryResult = collection.updateMany(Filters.eq("employee_id", 794875),
Updates.combine(Updates.set("department_id", 3), Updates.set("job", "Sales Manager")));

यहां, हम updateMany . के लिए एक क्वेरी फ़िल्टर पास कर रहे हैं तरीका। eq फ़िल्टर मिलान कर्मचारी_आईडी सटीक मिलान पाठ '794875' के साथ। फिर, हम विभाग_आईडी . को अपडेट करते हैं और नौकरी सेट . का उपयोग करके ऑपरेटर।

4. बदलें क्वेरी का उपयोग करना

किसी दस्तावेज़ के कई क्षेत्रों को अद्यतन करने के लिए सरल तरीका यह है कि इसे एक नए दस्तावेज़ से बदल दिया जाए जिसमें अद्यतन मान हों।

उदाहरण के लिए, यदि हम किसी दस्तावेज़ को कर्मचारी_आईडी . से बदलना चाहते हैं 794875, हम निम्नलिखित क्वेरी निष्पादित कर सकते हैं:

db.employee.replaceOne(
    {
        "employee_id": 794875
    },
    {
        "employee_id": 794875,
        "employee_name": "David Smith",
        "job": "Sales Manager",
        "department_id": 3,
        "salary": 30000,
        "hire_date": NumberLong("1643969311817")
    }
);

उपरोक्त आदेश आउटपुट में एक पावती JSON प्रिंट करेगा:

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

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

उपरोक्त क्वेरी में, हम replaceOne . प्रदर्शन कर रहे हैं , इसलिए, यह केवल एक दस्तावेज़ को उस फ़िल्टर से बदल देगा। वैकल्पिक रूप से, यदि हम सभी दस्तावेज़ों को उस फ़िल्टर क्वेरी से बदलना चाहते हैं, तो हमें updateMany का उपयोग करना होगा विधि।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB findOneAndDelete ()

  2. वर्ग 'मोंगो क्लाइंट' नहीं मिला

  3. MongoDB में एकाधिक अनुक्रमणिका छोड़ते समय "इंडेक्स नाम एक स्ट्रिंग होना चाहिए" को ठीक करें

  4. MongoDB ट्यूटोरियल:Scala . में MongoDB से कनेक्ट करना

  5. हाइब्रिड क्लाउड बनाम फुल पब्लिक क्लाउड - पेशेवरों और विपक्ष