मुझे आपके प्रश्न में एक गलत धारणा के साथ शायद "चाहिए" यह उपसर्ग करना चाहिए। तथ्य यह है कि MongoDB पारंपरिक RDBMS से इस मायने में अलग है कि यह "स्कीमलेस" है और आपको वास्तव में "फ़ील्ड बनाने" की आवश्यकता नहीं है। तो यह एक "टेबल स्कीमा" से अलग है जहाँ आप तब तक कुछ नहीं कर सकते जब तक कि स्कीमा बदल न जाए। "सत्यापन" हालांकि एक अलग चीज है और साथ ही लेखन के रूप में एक "अभी भी" अपेक्षाकृत नई विशेषता है।
अगर आप "एक सत्यापन नियम जोड़ना चाहते हैं" फिर ऐसे तरीके हैं जो संग्रह की वर्तमान स्थिति पर निर्भर करते हैं। किसी भी मामले में, वास्तव में कोई "इसमें जोड़ें" फ़ंक्शन नहीं है, लेकिन इसके बजाय कार्रवाई सभी को "प्रतिस्थापित" करना है निर्दिष्ट करने के लिए नए नियमों के साथ सत्यापन नियम। यह कैसे काम करता है इसके नियमों के लिए पढ़ें।
मौजूदा दस्तावेज़
जहां संग्रह में मौजूदा दस्तावेज़ हैं, जैसा कि दस्तावेज़ीकरण में बताया गया है
<ब्लॉकक्वॉट>मौजूदा दस्तावेज़
आप सत्यापन स्तर . का उपयोग करके यह नियंत्रित कर सकते हैं कि MongoDB मौजूदा दस्तावेज़ों को कैसे संभालता है विकल्प।
डिफ़ॉल्ट रूप से, सत्यापन स्तर सख्त है और MongoDB सभी इंसर्ट और अपडेट के लिए सत्यापन नियम लागू करता है। सत्यापन स्तर सेट करना से मध्यम सत्यापन मानदंडों को पूरा करने वाले मौजूदा दस्तावेज़ों के सम्मिलन और अद्यतनों के लिए सत्यापन नियम लागू करता है। मध्यम . के साथ स्तर, मौजूदा दस्तावेज़ों के अद्यतन जो सत्यापन मानदंड को पूरा नहीं करते हैं, उनकी वैधता के लिए जाँच नहीं की जाती है।
यह और निम्नलिखित उदाहरण खंड मूल रूप से कह रहे हैं कि .createCollection()
. पर विकल्पों के अलावा आप दस्तावेज़ों के साथ मौजूदा संग्रह को भी संशोधित कर सकते हैं, लेकिन "सावधान" होना चाहिए कि वर्तमान दस्तावेज़ आवश्यक नियमों को पूरा नहीं कर सकते हैं। इसलिए "मध्यम" . का उपयोग करें यदि आप अनिश्चित हैं तो सभी . के लिए नियम का पालन किया जाएगा संग्रह में दस्तावेज़।
आवेदन करने के लिए, आप .runCommand()
. का उपयोग करें वर्तमान में "कमांड" जारी करने की विधि जो सत्यापन नियम निर्धारित करती है। जो "सत्यापन स्तर" . है ऊपर के मार्ग से।
चूंकि आपके पास मौजूदा नियम हैं, हम उन्हें पुनः प्राप्त करने के लिए `.getCollectionInfos() का उपयोग कर सकते हैं और फिर नया नियम जोड़ सकते हैं और लागू कर सकते हैं:
let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;
validator.$or.push({ "LastLoginDate": { "$type": "date" } });
db.runCommand({
"collMod": "MyTestCollection",
"validator": validator,
"validationLevel": "moderate"
});
निश्चित रूप से जैसा कि पहले उल्लेख किया गया है, कि यदि आप आश्वस्त हैं कि दस्तावेज़ सभी शर्तों को पूरा करते हैं तो आप "सख्त" आवेदन कर सकते हैं इसके बजाय डिफ़ॉल्ट के रूप में।
खाली संग्रह
अगर ऐसा है कि संग्रह वास्तव में "खाली" है जिसमें कोई दस्तावेज़ नहीं है या आप संग्रह को "छोड़" सकते हैं क्योंकि वर्तमान डेटा परिणाम का नहीं है, तो आप बस उपरोक्त को बदल सकते हैं और .createCollection()
का उपयोग कर सकते हैं .drop()
. के संयोजन में :
let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;
validator.$or.push({ "LastLoginDate": { "$type": "date" } });
db.getCollection("MyTestCollection").drop();
db.createCollection( "MyTestCollection", { "validator": validator });