MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB स्कीमा सत्यापन का अवलोकन

हर कोई जानता है कि MongoDB स्कीमालेस है, तो स्कीमा सत्यापन करने की आवश्यकता क्यों है? MongoDB के स्कीमा-रहित व्यवहार के साथ एप्लिकेशन को विकसित करना और इसे अवधारणा के प्रमाण के रूप में उपयोग करना आसान और तेज़ है। लेकिन एक बार जब आवेदन उत्पादन में चला जाता है और स्थिर और परिपक्व हो जाता है, तो स्कीमा को बार-बार बदलने की आवश्यकता नहीं होती है और यह उचित भी नहीं है। इस समय, अवांछित डेटा डालने से बचने के लिए अपने डेटाबेस में कुछ स्कीमा सत्यापन लागू करना बहुत महत्वपूर्ण है जो आपके एप्लिकेशन को तोड़ सकता है। यह तब और महत्वपूर्ण हो जाता है जब एक ही डेटाबेस में कई स्रोतों से डेटा डाला जा रहा हो।

स्कीमा सत्यापन आपको प्रत्येक संग्रह में दस्तावेज़ों की विशिष्ट संरचना को परिभाषित करने की अनुमति देता है। यदि कोई कुछ दस्तावेज़ सम्मिलित करने का प्रयास करता है जो परिभाषित स्कीमा से मेल नहीं खाता है, तो MongoDB इस प्रकार के ऑपरेशन को अस्वीकार कर सकता है या सत्यापन कार्रवाई के प्रकार के अनुसार चेतावनी दे सकता है।

MongoDB आपके स्कीमा, दस्तावेज़ सत्यापन और JSON स्कीमा सत्यापन को मान्य करने के दो तरीके प्रदान करता है। JSON स्कीमा सत्यापन दस्तावेज़ सत्यापन का विस्तारित संस्करण है, तो चलिए दस्तावेज़ सत्यापन के साथ शुरू करते हैं।

दस्तावेज़ सत्यापन

रिलेशनल डेटाबेस के साथ काम करने वाले अधिकांश डेवलपर्स डेटा मॉडल या स्कीमा की पूर्वानुमेयता के महत्व को जानते हैं। इसलिए, MongoDB ने संस्करण 3.2 से दस्तावेज़ सत्यापन शुरू किया। आइए देखें कि MongoDB संग्रह में सत्यापन नियम कैसे जोड़ें।

मान लीजिए, आपके पास ऐसे उपयोगकर्ताओं का संग्रह है जिनके पास निम्न प्रकार के दस्तावेज़ हैं।

{
    "name": "Alex",
    "email": "example@sqldat.com",
    "mobile": "123-456-7890"
} 

और, निम्नलिखित सत्यापन हैं जिन्हें हम उपयोगकर्ता संग्रह में नए दस्तावेज़ जोड़ते समय जांचना चाहते हैं:

  • नाम, ईमेल फ़ील्ड अनिवार्य हैं
  • मोबाइल नंबरों को विशिष्ट संरचना का पालन करना चाहिए:xxx-xxx-xxxx

इस सत्यापन को जोड़ने के लिए, हम एक नया संग्रह बनाते समय "सत्यापनकर्ता" निर्माण का उपयोग कर सकते हैं। निम्नलिखित क्वेरी को मोंगो शेल में चलाएँ,

db.createCollection("users", {
  validator: {
        $and: [
            {
                "name": {$type: "string", $exists: true}
            },
            {
                "mobile": {$type: "string", $regex: /^[0-9]{3}-[0-9]{3}-[0-9]{4}$/}
            },
            {
                "email": {$type: "string", $exists: true}
            }
        ]
    }
})

आपको निम्न आउटपुट देखना चाहिए:

{ "ok" : 1 }

अब, यदि आप सत्यापन नियमों का पालन किए बिना कोई नया दस्तावेज़ जोड़ने का प्रयास करते हैं तो मोंगो एक सत्यापन त्रुटि फेंक देगा। निम्नलिखित सम्मिलित प्रश्नों को चलाने का प्रयास करें।

प्रश्न:1

db.users.insert({
    "name": "akash"
})

आउटपुट:

WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 121,
        "errmsg" : "Document failed validation"
    }
})

प्रश्न:2

db.users.insert({
    "name": "akash",
    "email": "example@sqldat.com",
    "mobile": "123-456-7890"
})

आउटपुट:

WriteResult({ "nInserted" : 1 })

हालाँकि, दस्तावेज़ सत्यापन दृष्टिकोण के साथ कुछ प्रतिबंध हैं जैसे कि कोई भी दस्तावेज़ में कितनी भी नई कुंजी-मूल्य जोड़ी जोड़ सकता है और इसे संग्रह में सम्मिलित कर सकता है। इसे दस्तावेज़ सत्यापन द्वारा रोका नहीं जा सकता है। निम्नलिखित उदाहरण पर विचार करें,

db.users.insert({
    "name": "akash",
    "email": "example@sqldat.com",
    "mobile": "123-456-7890",
    "gender": "Male"
})

आउटपुट:

WriteResult({ "nInserted" : 1 })

इसके अलावा, दस्तावेज़ सत्यापन केवल मूल्यों की जांच करता है। मान लीजिए, यदि आप "नाम" के बजाय "nmae" (टाइपो) के साथ दस्तावेज़ को एक कुंजी के रूप में जोड़ने का प्रयास करते हैं, तो mongo इसे एक नया फ़ील्ड मानेगा और दस्तावेज़ DB में डाला जाएगा। जब आप प्रोडक्शन डेटाबेस के साथ काम कर रहे हों तो इन चीजों से बचना चाहिए। इस सब का समर्थन करने के लिए, MongoDB ने संस्करण 3.6 से "सत्यापनकर्ता" निर्माण के साथ "jsonSchema" ऑपरेटर पेश किया। आइए देखें कि ऊपर के समान सत्यापन नियम कैसे जोड़ें और नए/गलत वर्तनी वाले फ़ील्ड जोड़ने से बचें।

मोंगोडीबी डीबीए बनें - मोंगोडीबी को प्रोडक्शन में लाना सीखें कि मोंगोडीबी को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानने की जरूरत है मुफ्त में डाउनलोड करें

jsonSchema सत्यापन

"jsonSchema" ऑपरेटर का उपयोग करके सत्यापन नियम जोड़ने के लिए मोंगो शेल में निम्न कमांड चलाएँ।

db.runCommand(
  {
    "collMod": "users_temp",
    "validator": {
      "$jsonSchema": {
        "bsonType": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "email"
        ],
        "properties": {
          "_id": {},
          "name": {
            "bsonType": "string"
          },
          "email": {
            "bsonType": "string"
          },
          "mobile": {
            "bsonType": "string",
            "pattern": "^[0-9]{3}-[0-9]{3}-[0-9]{4}$"
          }
        }
      }
    }
  })

आइए अब देखें, क्या होता है जब हम निम्नलिखित दस्तावेज़ को सम्मिलित करने का प्रयास करते हैं।

db.users.insert({
    "name": "akash",
    "email": "example@sqldat.com",
    "mobile": "123-456-7890",
    "gender": "Male"
})

यह एक त्रुटि देगा क्योंकि हमने "jsonSchema" में लिंग क्षेत्र को परिभाषित नहीं किया है।

WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 121,
        "errmsg" : "Document failed validation"
    }
})

उसी तरह, यदि आपके पास किसी भी फ़ील्ड नाम में टाइपो हैं, तो मोंगो वही त्रुटि देगा।

ऊपर परिभाषित स्कीमा वही है जिसका उपयोग हमने दस्तावेज़ सत्यापन में किया था। इसके अतिरिक्त, हमने फ़ील्ड नामों में टाइपो से बचने और दस्तावेज़ों में नए फ़ील्ड जोड़ने से बचने के लिए "अतिरिक्त गुण" फ़ील्ड जोड़ा है। यह केवल "गुण" फ़ील्ड के अंतर्गत परिभाषित फ़ील्ड की अनुमति देगा। यहां कुछ गुणों का अवलोकन दिया गया है जिनका उपयोग हम "jsonSchema" ऑपरेटर के अंतर्गत कर सकते हैं।

  • bsonType:सरणी | वस्तु | स्ट्रिंग | बूलियन | संख्या | शून्य
  • आवश्यक:सभी अनिवार्य क्षेत्रों की एक सरणी
  • enum:किसी भी क्षेत्र के लिए केवल संभावित मानों की एक सरणी
  • न्यूनतम:फ़ील्ड का न्यूनतम मान
  • अधिकतम:फ़ील्ड का अधिकतम मान
  • न्यूनतम लंबाई:फ़ील्ड की न्यूनतम लंबाई
  • मिश्रण लंबाई:फ़ील्ड की अधिकतम लंबाई
  • गुण:मान्य JSON स्कीमा का संग्रह
  • अतिरिक्त गुण:गुण फ़ील्ड के अंतर्गत उल्लिखित के अलावा किसी अन्य फ़ील्ड को जोड़ने से रोकता है
  • शीर्षक:किसी भी क्षेत्र के लिए शीर्षक।
  • विवरण:किसी भी क्षेत्र के लिए संक्षिप्त विवरण।

स्कीमा सत्यापन के अलावा, "jsonSchema" ऑपरेटर का उपयोग एकत्रीकरण पाइपलाइन के अंदर खोज और मिलान चरण में भी किया जा सकता है।

निष्कर्ष

दस्तावेज़/स्कीमा सत्यापन सभी स्थितियों में आवश्यक या वांछनीय नहीं हैं, लेकिन आम तौर पर, उन्हें अपने डेटाबेस में जोड़ना एक अच्छा अभ्यास है क्योंकि इससे डेवलपर्स की उत्पादकता में वृद्धि होगी जो आपके डेटाबेस से निपट रहे हैं। उन्हें पता चल जाएगा कि डेटाबेस से किस तरह की प्रतिक्रिया की उम्मीद है क्योंकि कोई यादृच्छिक डेटा नहीं होगा।

इस लेख में, हमने MongoDB में स्कीमा सत्यापन के महत्व और दस्तावेज़ सत्यापन और "jsonSchema" ऑपरेटर का उपयोग करके दस्तावेज़ स्तर पर सत्यापन जोड़ने के तरीके के बारे में सीखा।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. एक कतार सेवा के रूप में MongoDB?

  2. MongoDB - फ़ाइल का आकार बहुत बड़ा और बढ़ रहा है

  3. यदि दस्तावेज़ मौजूद है तो MongoDB सही है

  4. MongoDB में .NET के माध्यम से इंडेक्स कैसे बनाएं?

  5. MongoDB शेल में ISODate में दिन जोड़ना/घटाना