MongoDB में _id फ़ील्ड को सीधे अपडेट नहीं किया जा सकता
MongoDB में एक बार डॉक्यूमेंट बन जाने के बाद उसका _id फ़ील्ड अपरिवर्तनीय (immutable) होता है। आप सीधे update() या $set का उपयोग करके _id नहीं बदल सकते। हालांकि, आप एक वर्कअराउंड का उपयोग कर सकते हैं: डॉक्यूमेंट को पढ़ें, उसका _id बदलें, नया डॉक्यूमेंट सेव करें, और पुराने को हटा दें।
उदाहरण: संग्रह बनाना
> db.updatingIdFieldDemo.insertOne({"StudentName":"Chris"});
{ "acknowledged": true, "insertedId": ObjectId("5ce271bb36e8b255a5eee949") }
डॉक्यूमेंट देखना
> db.updatingIdFieldDemo.find();
{ "_id": ObjectId("5ce271bb36e8b255a5eee949"), "StudentName": "Chris" }
_id बदलने की प्रक्रिया
- डॉक्यूमेंट को एक वेरिएबल में स्टोर करें।
- उस वेरिएबल के
_idको नए मान पर सेट करें। save()मेथड से नया डॉक्यूमेंट सेव करें (यह नया _id के साथ नया डॉक्यूमेंट बनाएगा)।- पुराने _id वाले डॉक्यूमेंट को
remove()से हटा दें।
> var myDocument = db.updatingIdFieldDemo.findOne({StudentName:"Chris"});
> myDocument._id = 101;
101
> db.updatingIdFieldDemo.save(myDocument);
WriteResult({ "nMatched": 0, "nUpserted": 1, "nModified": 0, "_id": 101 })
> db.updatingIdFieldDemo.remove({_id:ObjectId("5ce271bb36e8b255a5eee949")});
WriteResult({ "nRemoved": 1 })
परिणाम जांचना
> db.updatingIdFieldDemo.find();
{ "_id": 101, "StudentName": "Chris" }
अब डॉक्यूमेंट का _id ObjectId के बजाय कस्टम मान 101 है।
सावधानी: यह तरीका एप्लिकेशन लेवल पर करें और ध्यान रखें कि _id यूनिक होना चाहिए। प्रोडक्शन में _id बदलना दुर्लभ है और सावधानी से करना चाहिए।