कस्टम _id के साथ insert() का व्यवहार
जब आप मैन्युअल रूप से _id निर्दिष्ट करके insert() (या insertOne()) का उपयोग करते हैं, और वह _id पहले से मौजूद है, तो MongoDB **डुप्लिकेट कुंजी त्रुटि (E11000)** फेंकता है और कुछ भी नहीं डालता। यह स्वचालित रूप से अपडेट नहीं करता।
उदाहरण: कस्टम _id के साथ डालना
> db.customIdDemo.insert({"_id":1,"StudentName":"John"});
WriteResult({ "nInserted" : 1 })
> db.customIdDemo.insert({"_id":1,"StudentName":"Carol"});
// त्रुटि: E11000 duplicate key error collection: admin.customIdDemo index: _id_ dup key: { : 1.0 }
WriteResult({ "nInserted" : 0, "writeError" : { "code" : 11000, "errmsg" : "E11000 duplicate key error..." } })
> db.customIdDemo.insert({"_id":2,"StudentName":"Carol"});
WriteResult({ "nInserted" : 1 })
> db.customIdDemo.insert({"_id":2,"StudentName":"Carol"});
// फिर से त्रुटि
> db.customIdDemo.insert({"_id":3,"StudentName":"Chris"});
WriteResult({ "nInserted" : 1 })
अंतिम डेटा
> db.customIdDemo.find().pretty();
आउटपुट:
समाधान: Upsert के लिए update() का उपयोग करें
यदि आप "मौजूद होने पर अपडेट करें, अन्यथा डालें" व्यवहार चाहते हैं, तो
insert()के बजायupdate()के साथupsert: trueका उपयोग करें:db.customIdDemo.update( { "_id": 1 }, // क्वेरी: _id 1 वाला दस्तावेज़ ढूंढें { $set: { "StudentName": "Carol" } }, // अपडेट: नाम सेट करें { upsert: true } // ऑप्शन: न मिलने पर डालें );यह मौजूदा _id 1 के लिए नाम "Carol" अपडेट करेगा, या यदि _id 1 मौजूद नहीं है तो
{_id:1, StudentName:"Carol"}डालेगा।