MongoDB में $rename ऑपरेटर का उपयोग करके फ़ील्ड नाम बदलना और नेस्ट करना
$rename ऑपरेटर फ़ील्ड का नाम बदलता है। डॉट नोटेशन का उपयोग करके आप फ़ील्ड को नेस्टेड ऑब्जेक्ट संरचना में ले जा सकते हैं।
सैंपल डेटा बनाना
> db.changeSimpleFieldDemo.insertOne({"StudentMarks":58,"StudentSubject":"MySQL"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0847a825ddae1f53b62205") }
दस्तावेज़ देखना
> db.changeSimpleFieldDemo.find();
आउटपुट:
$rename के साथ फ़ील्ड्स को नेस्टेड ऑब्जेक्ट में बदलना
> // चरण 1: StudentMarks को अस्थायी नाम "obj" में रीनेम > db.changeSimpleFieldDemo.update({}, {$rename: {StudentMarks: 'obj'}}, {multi: true}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) > // चरण 2: obj को Student.Marks में, और StudentSubject को Student.Subject में रीनेम > db.changeSimpleFieldDemo.update({}, {$rename: {obj: 'Student.Marks', StudentSubject: 'Student.Subject'}}, {multi: true}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })परिणाम (अपेक्षित संरचना)
चरण-दर-चरण स्पष्टीकरण
- पहले
StudentMarksको अस्थायी नामobjमें रीनेम किया (क्योंकि सीधेStudent.Marksमें रीनेम करने से नेस्टेड पथ बन जाता)- फिर
objकोStudent.Marksमें औरStudentSubjectकोStudent.Subjectमें रीनेम कियाmulti: trueसभी मिलान करने वाले दस्तावेज़ों को अपडेट करता हैमहत्वपूर्ण नोट्स
$renameकेवल फ़ील्ड नाम बदलता है, मान नहीं- लक्ष्य पथ में डॉट होने पर पैरेंट ऑब्जेक्ट स्वचालित रूप से बनता है
- यदि लक्ष्य फ़ील्ड पहले से मौजूद है, तो यह ओवरराइट हो जाता है
- Deprecated
update()के बजायupdateMany()उपयोग करें
आधुनिक सिंटैक्स
एग्रीगेशन विकल्प (नॉन-डिस्ट्रक्टिव)