Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MongoDB

MongoDB संग्रह पर प्राइमरी की कैसे बदलें?

MongoDB में _id फील्ड (प्राइमरी की) अपरिवर्तनीय है; आप मौजूदा दस्तावेज़ के _id को सीधे अपडेट नहीं कर सकते। इसे "बदलने" के लिए, आपको दस्तावेज़ को हटाना होगा और एक नए _id (या कस्टम _id) के साथ पुनः डालना होगा।

उदाहरण: एकल दस्तावेज़

> db.demo41.insertOne({"StudentName":"Carol"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e25ce4acfb11e5c34d898e3") }

दस्तावेज़ देखना

> db.demo41.find();

आउटपुट: { "_id" : ObjectId("5e25ce4acfb11e5c34d898e3"), "StudentName" : "Carol" }

प्राइमरी की "बदलें" (हटाएं और पुनः डालें)

> var next = db.demo41.find()
> next.forEach(function(s) {
    var prevId = s._id;
    delete s._id;
    db.demo41.insert(s);
    db.demo41.remove(prevId);
});

नई प्राइमरी की जांचें

> db.demo41.find();

आउटपुट: { "_id" : ObjectId("5e25cee5cfb11e5c34d898e4"), "StudentName" : "Carol" } (नया ObjectId)।

व्याख्या

  1. सभी दस्तावेज़ों पर पुनरावृत्त करें (forEach)।
  2. पुराना _id स्टोर करें।
  3. दस्तावेज़ से _id हटाएं (delete s._id)।
  4. पुनः डालें → MongoDB नया _id जनरेट करता है (या आप कस्टम प्रदान कर सकते हैं)।
  5. पुराना दस्तावेज़ उसके _id द्वारा हटाएं।

महत्वपूर्ण विचार

  • एटॉमिक नहीं: यह दो ऑपरेशन है; विफलता असंगत स्थिति छोड़ सकती है। लेनदेन (MongoDB 4.0+) का उपयोग करें।
  • कस्टम _id: आप insert({_id: "my-custom-id", ...}) के साथ अपना _id निर्दिष्ट कर सकते हैं।
  • संदर्भ: अन्य संग्रह इस _id को संदर्भित कर सकते हैं; उन्हें भी अपडेट करें।
  • बल्क: कई दस्तावेज़ों के लिए, bulkWrite का उपयोग करें।

चेतावनी

उत्पादन में _id बदलने से बचें जब तक बिल्कुल आवश्यक न हो; एप्लिकेशन लॉजिक में सर्जरी किज का उपयोग करें।

  1. - MongoDB में Collection में Documents की Number Limit करना

    Collection में documents की number limit करने के लिए capped: true set करें। Size भी वहीँ set करें। Capped Collection बनाना > db.createCollection( demo683, { capped: true, size: 5 ,max:4} ) { ok : 1 } > db.demo683.insertOne({Value:100}); { acknowledged : true, insertedId : ObjectId(5ea468afa7e

  1. - क्या MySQL में प्राइमरी की ऑटोमैटिकली इंडेक्स्ड होती है?

    हाँ, प्राइमरी की MySQL में ऑटोमैटिकली इंडेक्स्ड होती है क्योंकि प्राइमरी की, इंडेक्स, आदि B-ट्रीज़ में स्टोर होते हैं। InnoDB और MyISAM सहित सभी इंजन प्राइमरी की को ऑटोमैटिकली इंडेक्स करने का समर्थन करते हैं। प्राइमरी की InnoDB, MyISAM और अन्य इंजन्स में अंतर्निहित रूप से इंडेक्स्ड होती है। आइए प

  1. - C# में StringDictionary की कुंजियों का संग्रह प्राप्त करें

    परिचय StringDictionary क्लास (System.Collections.Specialized नेमस्पेस में) एक हैश टेबल है जिसमें कुंजी और मान दोनों स्ट्रिंग होते हैं। इसकी Keys प्रॉपर्टी कुंजियों का ICollection लौटाती है, जिसे ऐरे में कॉपी किया जा सकता है या एन्यूमरेट किया जा सकता है। उदाहरण 1: कुंजियों को ऐरे में कॉपी करना using