Djnago / djongo मोंगो डीबी में अद्वितीय सूचकांक बनाने के बाद कैसे पलायन करें

Unsplash पर फैसल एम द्वारा फोटो

मैं अपने सर्वर के विकास के लिए Django / djongo / mongodb / drf स्टैक का उपयोग कर रहा हूं। सर्वर स्वयं क्रॉलिंग मैनेजर केंद्रित है, इसलिए कई क्रॉलर उदाहरण क्रॉल किए गए समाचार डेटा को संगति के साथ संग्रहीत कर सकते हैं।

मेरे विशिष्ट अवसर में, मैं इस विशिष्ट समस्या का सामना करता हूँ। मैंने Article_url नाम के मॉडल को परिभाषित किया था जो अद्वितीय रूप से कॉन्फ़िगर नहीं किया गया था। और Article_url के लिए सत्यापनकर्ता को विवादित न बनाया जाए। (drf's serializer में) क्योंकि सत्यापनकर्ता महंगा ऑपरेशन है, और मैं बड़े पैमाने पर डेटा के साथ काम कर रहा हूं, मुझे डेटाबेस की परत में इसे रोकने की आवश्यकता है

मेरा मूल मॉडल जैसा दिखता था,

डोंगो आयात मॉडल से
वर्ग RawNews (मॉडल। मॉडल): वर्ग मेटा: db_table = 'raw' _id = मॉडल ।OjectIdField () समय = मॉडल। DateTimeField () शीर्षक = मॉडल .harField (अधिकतम-गति = 200) article_url = model.URLField (max_length = 200) body_html = model.TextField ()

मेरे बदलने के बाद (लेख लेख के लिए अद्वितीय = सही जोड़ा गया)

डोंगो आयात मॉडल से
वर्ग RawNews (मॉडल। मॉडल): वर्ग मेटा: db_table = 'raw' _id = मॉडल ।bjectIdField () समय = मॉडल। DateTimeField () शीर्षक = मॉडल .CharField (अधिकतम गति = 200) article_url = model.URLField (max_length = 200) अद्वितीय = सत्य) body_html = model.TextField ()

फिर,

python manage.py makemigrations -> हमेशा की तरह ठीक काम करता है

python manage.py प्रवास ->

Pymongo त्रुटि: {'ok': 0.0, 'irmsg': 'E11000 डुप्लिकेट कुंजी त्रुटि संग्रह: db.raw अनुक्रमणिका: raw_article_url_uniq डुबकी कुंजी: {article_url: "https: ~ ~ ...

इसे हल करने के लिए, आपको उस कुंजी के लिए कॉन्फ्लिक्शन को दूर करना होगा जिसे आप अनूठे मैन्युअल रूप से बनाना चाहते हैं, और फिर से माइग्रेट करें।

चलो इसके लिए चलते है!

टी एल; डॉ

  • कैसे mongodb संग्रह में अद्वितीय के रूप में नए सूचकांक बनाने के लिए
  • कैसे भ्रम डेटा को दूर करने के लिए ताकि अद्वितीय सूचकांक त्रुटि मुक्त बनाया जा सके।
  • अंत में, नए मॉडल अद्वितीय क्षेत्र के साथ django / djongo / mongodb परियोजना को कैसे स्थानांतरित करें

कैसे mongodb संग्रह में अद्वितीय के रूप में नए सूचकांक बनाने के लिए

db.raw.ensureIndex ({article_url: 1}, {अद्वितीय: सत्य, ड्रॉपडूप: सच})

उपरोक्त कमांड केवल तभी काम करना चाहिए जब आप mongodb 2.X का उपयोग कर रहे हों

यदि आप mongodb 3.X का उपयोग कर रहे हैं तो आपको नीचे संदेश प्राप्त होगा।

{"ओके": 0, "इरम्सग": "E11000 डुप्लिकेट कुंजी त्रुटि संग्रह: db.raw सूचकांक: article_url_1 डुबकी कुंजी: {article_url:" https: // ~~~ "}", "कोड": 11000, "कोडनाम ":" DuplicateKey "," keyPattern ": {" article_url ": 1}," keyValue ": {" article_url ":" https: // ~~~ "}}
चूंकि मोंगोडब 3.X ड्रॉपडअप (ड्रॉप डुप्लिकेट) को हटा दिया गया है, और इसे अनदेखा किया जा रहा है।

आधिकारिक दस्तावेज कहता है कि यह ठीक है / लेकिन यह (2020.2 के बाद से अद्यतन नहीं किया गया दस्तावेज) है। इसलिए, ऊपर की कमांड अप्रचलित होगी, और आपको टाइप करना होगा

db.raw.ensureIndex ({article_url: 1}, {unique: true})

आप अभी भी एक ही त्रुटि प्राप्त करेंगे, आपको पहले अद्वितीय अनुक्रमणिका बनाने के लिए मैन्युअल रूप से संघर्ष कुंजियों को निकालना होगा। (निम्नलिखित का पालन करें)

विवादित डेटा को कैसे हटाया जाए ताकि अद्वितीय सूचकांक को त्रुटि मुक्त बनाया जा सके।

। article_url: doc.article_url});})

आपके संग्रह के आकार के आधार पर इस ऑपरेशन में कुछ समय लग सकता है। एक बार जब यह चरण प्रतिस्पर्धा में है, तो आप अब कुंजी के लिए अद्वितीय सूचकांक बना सकते हैं (फिर से ऊपर अनुभाग चलाएं)

misc :: अतिरिक्त कमांड्स

// सूची 'कच्चे' के संग्रह के लिए बनाई गई सूची <- इस db.raw.getIndexes () को बदलें
// इंडेक्स नाम के साथ बनाया गया इंडेक्स निकालें (आप ऊपर दिए गए कमांड से लिस्ट कर सकते हैं) db.raw.dropIndex () )

संदर्भ

https://docs.mongodb.com/manual/tutorial/manage-indexes/