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

एक ही MongoDB अपडेट में पुश और सेट ऑपरेशंस

1. अवलोकन

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

इस संक्षिप्त ट्यूटोरियल में, हम परिचय देंगे कि $पुश का प्रदर्शन कैसे करें और $सेट एक ही अद्यतन क्वेरी में एक साथ संचालन।

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

इससे पहले कि हम कई अद्यतन संचालन करने के लिए आगे बढ़ें, हमें पहले एक डेटाबेस सेट करना होगा baeldung और नमूना संग्रह अंक :

use baeldung;
db.createCollection(marks);

आइए संग्रह में कुछ दस्तावेज़ सम्मिलित करें चिह्न insertMany . का उपयोग करके MongoDB की विधि:

db.marks.insertMany([
    {
        "studentId": 1023,
        "studentName":"James Broad",
        "joiningYear":"2018",
        "totalMarks":100,
        "subjectDetails":[
            {
                "subjectId":123,
                "subjectName":"Operating Systems Concepts",
                "marks":40
            },
            {
                "subjectId":124,
                "subjectName":"Numerical Analysis",
                "marks":60
            }
        ]
    },
    {
        "studentId": 1024,
        "studentName":"Chris Overton",
        "joiningYear":"2018",
        "totalMarks":110,
        "subjectDetails":[
            {
                "subjectId":123,
                "subjectName":"Operating Systems Concepts",
                "marks":50
            },
            {
                "subjectId":124,
                "subjectName":"Numerical Analysis",
                "marks":60
            }
        ]
    }
]);

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

{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("622300cc85e943405d04b567"),
        ObjectId("622300cc85e943405d04b568")
    ]
}

अब तक, हमने संग्रह में कुछ नमूना दस्तावेज़ सफलतापूर्वक सम्मिलित किए हैं अंक

3. समस्या को समझना

समस्या को समझने के लिए, आइए पहले उस दस्तावेज़ को समझें जिसे हमने अभी डाला है। इसमें छात्र का विवरण और विभिन्न विषयों में उनके द्वारा प्राप्त अंक शामिल हैं। कुल चिह्न  विभिन्न विषयों में प्राप्त अंकों का योग है।

आइए एक ऐसी स्थिति पर विचार करें जहां हम विषय विवरण . में एक नया विषय जोड़ना चाहते हैं सरणी। डेटा को सुसंगत बनाने के लिए, हमें totalMarks . को अपडेट करना होगा क्षेत्र भी।

MongoDB में, सबसे पहले, हम $push का उपयोग करके सरणी में नया विषय जोड़ेंगे ऑपरेटर। फिर हम totalMarks . सेट करेंगे $set . का उपयोग करके किसी विशेष मान के लिए फ़ील्ड ऑपरेटर।

ये दोनों ऑपरेशन $push . का उपयोग करके अलग-अलग किए जा सकते हैं और $सेट ऑपरेटर, क्रमशः। लेकिन हम दोनों कार्यों को एक साथ करने के लिए MongoDB क्वेरी लिख सकते हैं।

4. MongoDB शेल क्वेरी का उपयोग करना

MongoDB में, हम विभिन्न अद्यतन ऑपरेटरों का उपयोग करके दस्तावेज़ के कई क्षेत्रों को अपडेट कर सकते हैं। यहां, हम $push . दोनों का उपयोग करेंगे और $सेट ऑपरेटर एक साथ updateOne . में क्वेरी।

आइए, $push . दोनों वाले उदाहरण की जांच करें और $सेट ऑपरेटर एक साथ:

db.marks.updateOne(
    {
        "studentId": 1023
    },
    {
        $set: {
            totalMarks: 170
        },
        $push: {
            "subjectDetails":{
                "subjectId": 126,
                "subjectName": "Java Programming",
                "marks": 70
            }
        }
    }
);

यहाँ, उपरोक्त क्वेरी में, हमने studentId के आधार पर फ़िल्टर क्वेरी जोड़ी है। फ़िल्टर किए गए दस्तावेज़ मिलने के बाद, हम totalMarks . को अपडेट करते हैं $सेट ऑपरेटर का उपयोग करना। इसके अलावा, हम नए विषय डेटा को विषय विवरण . में सम्मिलित करते हैं $पुश . का उपयोग करके सरणी ऑपरेटर।

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

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

यहां, मिलान की गई गणना दस्तावेज़ की संख्या शामिल है जो फ़िल्टर से मेल खाती है, जबकि modifiedCount संशोधित दस्तावेज़ों की संख्या शामिल है।

5. जावा ड्राइवर कोड

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

आगे बढ़ने से पहले, आइए पहले DB और आवश्यक संग्रह से जुड़ें:

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

यहां, हम MongoDB से जुड़ रहे हैं, जो लोकलहोस्ट पर पोर्ट डिफॉल्ट पोर्ट 27017 पर चल रहा है।

आइए अब जावा ड्राइवर कोड देखें:

Document subjectData = new Document()
  .append("subjectId", 126)
  .append("subjectName", "Java Programming")
  .append("marks", 70); 
UpdateResult updateQueryResult = collection.updateOne(Filters.eq("studentId", 1023), 
  Updates.combine(Updates.set("totalMarks", 170), 
  Updates.push("subjectDetails", subjectData)));

इस कोड स्निपेट में, हमने updateOne . का उपयोग किया है विधि, जो लागू फ़िल्टर studentId . के आधार पर केवल एक दस्तावेज़ को अपडेट करती है 1023. तब हमने Updates.combine . का उपयोग किया था एक ही कॉल में कई ऑपरेशन करने के लिए। फ़ील्ड कुल चिह्न 170 में अपडेट किया जाएगा, और एक नया दस्तावेज़ subjectData सरणी फ़ील्ड पर धकेल दिया जाएगा “विषय विवरण”


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB संग्रह के अंदर एक विशिष्ट एम्बेडेड दस्तावेज़ कैसे प्राप्त करें?

  2. MongoDB का उपयोग कर ट्विटर जैसा ऐप

  3. MongoDB शेयर और असंतुलित एकत्रीकरण भार

  4. आबादी वाले क्षेत्रों पर MongoDB क्वेरी

  5. एक नए/दूसरे मोंगो डेटाबेस में उपयोगकर्ता को जोड़ने के लिए मुझे कौन से मोंगोडीबी उपयोगकर्ता विशेषाधिकारों की आवश्यकता है?