MongoDB प्राथमिक कुंजी: ObjectId() के साथ _id फ़ील्ड सेट करने का उदाहरण

⚡ स्मार्ट सारांश

MongoDB प्राइमरी की, _id फ़ील्ड है जो किसी कलेक्शन में मौजूद हर डॉक्यूमेंट को विशिष्ट रूप से पहचानती है। डिफ़ॉल्ट रूप से इसमें स्वचालित रूप से जनरेट किया गया ObjectId होता है, लेकिन डॉक्यूमेंट इंसर्ट करते समय आप _id फ़ील्ड में अपना मान भी असाइन कर सकते हैं।

  • 🔑 प्राथमिक प्रमुख भूमिका: _id फ़ील्ड प्राथमिक कुंजी है जो किसी दस्तावेज़ में प्रत्येक दस्तावेज़ को विशिष्ट रूप से पहचानती है। MongoDB संग्रह.
  • 🆔 डिफ़ॉल्ट ऑब्जेक्ट आईडी: यदि आप _id को छोड़ देते हैं, MongoDB यह स्वचालित रूप से दस्तावेज़ में एक अद्वितीय 12-बाइट ऑब्जेक्टआईडी मान जोड़ता है।
  • समय-क्रमबद्ध: एक ऑब्जेक्ट आईडी 4-बाइट टाइमस्टैम्प से शुरू होती है, इसलिए आईडी को निर्माण समय के अनुसार मोटे तौर पर क्रमबद्ध किया जा सकता है।
  • ✍️ कस्टम कुंजियाँ: दस्तावेज़ सम्मिलित करते समय आप अपना स्वयं का _id मान प्रदान कर सकते हैं, जैसे कि कोई संख्या या स्ट्रिंग।
  • 🔒 अपरिवर्तनीय: एक बार सेट हो जाने के बाद, _id का मान बदला नहीं जा सकता; इसे बदलने के लिए आपको इसे हटाकर दोबारा डालना होगा।

प्राथमिक कुंजी क्या है? MongoDB?

In MongoDB, _id फ़ील्ड को संग्रह के लिए प्राथमिक कुंजी के रूप में उपयोग करें ताकि संग्रह में प्रत्येक दस्तावेज़ को विशिष्ट रूप से पहचाना जा सके। _id फ़ील्ड में एक अद्वितीय ObjectID मान होता है।

संग्रह में दस्तावेज़ सम्मिलित करते समय डिफ़ॉल्ट रूप से, यदि आप फ़ील्ड नाम में _id के साथ फ़ील्ड नाम नहीं जोड़ते हैं, तो MongoDB नीचे दिखाए अनुसार स्वचालित रूप से एक ऑब्जेक्ट आईडी फ़ील्ड जोड़ देगा

प्राथमिक कुंजी MongoDB

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

यदि आप यह सुनिश्चित करना चाहते हैं MongoDB संग्रह बनाते समय _id फ़ील्ड नहीं बनाता है और यदि आप संग्रह की _id के रूप में अपनी स्वयं की id निर्दिष्ट करना चाहते हैं, तो आपको संग्रह बनाते समय इसे स्पष्ट रूप से परिभाषित करना होगा।

जब स्पष्ट रूप से कोई id फ़ील्ड बनाई जाती है, तो उसे उसके नाम में _id के साथ बनाया जाना चाहिए।

आइये एक उदाहरण देखें कि हम इसे कैसे प्राप्त कर सकते हैं।

db.Employee.insert({_id:10, "EmployeeName" : "Smith"})

Code स्पष्टीकरण:

  1. हम यह मान रहे हैं कि हम संग्रह में पहला दस्तावेज़ बना रहे हैं और इसलिए संग्रह बनाते समय उपरोक्त कथन में, हम स्पष्ट रूप से फ़ील्ड _id को परिभाषित करते हैं और इसके लिए एक मान परिभाषित करते हैं।

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

आउटपुट:

प्राथमिक कुंजी MongoDB

आउटपुट स्पष्ट रूप से दिखाता है कि संग्रह बनाते समय हमने जो _id फ़ील्ड परिभाषित किया था, अब उसे संग्रह के लिए प्राथमिक कुंजी के रूप में उपयोग किया जाता है।

ऑब्जेक्टआईडी क्या है? MongoDB?

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

प्रत्येक ऑब्जेक्ट आईडी को एक संक्षिप्त बाइनरी रूप में संग्रहीत किया जाता है, लेकिन इसे 24 वर्णों वाली हेक्साडेसिमल स्ट्रिंग के रूप में प्रदर्शित किया जाता है, उदाहरण के लिए ObjectId(“507f1f77bcf86cd799439011”)। पहले कुछ बाइट्स वर्तमान समय पर आधारित होते हैं, जिसका अर्थ है कि दस्तावेज़ बनने के साथ-साथ मान लगातार बढ़ते जाते हैं। इससे ऑब्जेक्ट आईडी न केवल अद्वितीय हो जाता है, बल्कि इसे प्रविष्टि क्रम के अनुसार क्रमबद्ध भी किया जा सकता है, जो तब उपयोगी होता है जब आप सबसे नए या सबसे पुराने रिकॉर्ड को पहले देखना चाहते हैं।

एक की संरचना MongoDB ऑब्जेक्टआई.डी

A MongoDB ऑब्जेक्ट आईडी ठीक 12 बाइट्स लंबी होती है, और इसके प्रत्येक भाग का एक विशिष्ट अर्थ होता है। इसकी संरचना को समझने से यह समझने में मदद मिलती है कि ऑब्जेक्ट आईडी अद्वितीय और समय-क्रमबद्ध क्यों होती हैं:

  • 4-बाइट टाइमस्टैम्प: यूनिक्स युग से लेकर अब तक के सेकंडों की संख्या, जो ऑब्जेक्ट आईडी के निर्माण का समय रिकॉर्ड करती है। इससे आईडी को समय के अनुसार क्रमबद्ध करना आसान हो जाता है।
  • 5-बाइट का यादृच्छिक मान: यह एक ऐसा मान है जो प्रत्येक प्रक्रिया के लिए एक बार उत्पन्न होता है, जिसमें मशीन और प्रक्रिया की पहचान को संयोजित किया जाता है, इसलिए अलग-अलग क्लाइंट अलग-अलग आईडी उत्पन्न करते हैं।
  • 3-बाइट वृद्धिशील काउंटर: एक काउंटर जो एक यादृच्छिक मान से शुरू होता है और उसी सेकंड में प्रत्येक नए ऑब्जेक्टआईडी के साथ बढ़ता है, जिससे तीव्र प्रविष्टियों के दौरान टकराव को रोका जा सके।

ये तीनों भाग मिलकर यह सुनिश्चित करते हैं कि प्रत्येक ObjectId अद्वितीय हो, भले ही एक ही समय में विभिन्न सर्वरों पर कई दस्तावेज़ डाले गए हों। आप किसी भी समय ObjectId पर getTimestamp() विधि को कॉल करके उसमें निहित निर्माण समय पढ़ सकते हैं।

ऑब्जेक्ट आईडी को प्राथमिक कुंजी के रूप में उपयोग करने के लाभ

डिफ़ॉल्ट ObjectId को _id प्राइमरी की के रूप में उपयोग करने से कई व्यावहारिक लाभ मिलते हैं, यही कारण है कि अधिकांश MongoDB संग्रह इस पर निर्भर करते हैं:

  • स्वचालित उत्पादन: आपको स्वयं कुंजी मान बनाने या प्रबंधित करने की आवश्यकता नहीं है, जिससे डुप्लिकेट कुंजियों की संभावना कम हो जाती है।
  • वैश्विक विशिष्टता: ऑब्जेक्ट आईडी सर्वरों में अद्वितीय रहते हैं, इसलिए वे वितरित और शार्डेड डिप्लॉयमेंट में अच्छी तरह से काम करते हैं।
  • अंतर्निर्मित टाइमस्टैम्प: अंतर्निहित निर्माण समय आपको अतिरिक्त तिथि फ़ील्ड के बिना ही दस्तावेजों को उनकी आयु के अनुसार क्रमबद्ध या फ़िल्टर करने की सुविधा देता है।
  • उच्च प्रदर्शन: क्लाइंट-साइड जनरेशन सर्वर तक राउंड ट्रिप से बचता है,ping तेजी से जुड़ता है।

हालाँकि ObjectId अधिकांश अनुप्रयोगों के लिए उपयुक्त है, फिर भी आप एक कस्टम _id चुन सकते हैं, जैसे कि ईमेल पता या उत्पाद कोड, जब एक स्वाभाविक व्यावसायिक कुंजी क्वेरी को सरल बनाती है। सही विकल्प इस बात पर निर्भर करता है कि आप अपने डेटा को कैसे खोजेंगे और संबंधित करेंगे।

अक्सर पूछे जाने वाले प्रश्न

नहीं। एक बार दस्तावेज़ बन जाने के बाद _id फ़ील्ड अपरिवर्तनीय रहता है। इसे बदलने के लिए, आपको मौजूदा दस्तावेज़ को हटाकर वांछित _id मान के साथ एक नया दस्तावेज़ सम्मिलित करना होगा।

_id फ़ील्ड अधिकांश BSON प्रकारों को स्वीकार करता है, जिनमें ObjectId, पूर्णांक, स्ट्रिंग और यहां तक ​​कि एम्बेडेड दस्तावेज़ भी शामिल हैं। एकमात्र नियम यह है कि मान संग्रह के भीतर अद्वितीय होना चाहिए और एक ऐरे नहीं हो सकता।

हां. MongoDB यह इंडेक्स हर कलेक्शन के _id फ़ील्ड पर स्वचालित रूप से एक यूनिक इंडेक्स बनाता है। इस इंडेक्स को हटाया नहीं जा सकता और यह प्राइमरी की के ज़रिए लुकअप को बहुत तेज़ बनाता है।

एआई किसी ऑब्जेक्ट आईडी के टाइमस्टैम्प की व्याख्या कर सकता है, और उसे समझने के लिए कोड जनरेट कर सकता है।tracgetTimestamp() का उपयोग करके निर्माण समय ज्ञात करें, और ObjectIds को स्ट्रिंग में परिवर्तित करें, सहायता करें।ping डेवलपर्स दस्तावेज़ पहचानकर्ताओं को अधिक तेज़ी से डीबग और समझ सकते हैं।

जी हां। एआई आपके क्वेरी पैटर्न, विशिष्टता की आवश्यकताओं और शार्डिंग योजनाओं के आधार पर यह सलाह दे सकता है कि डिफ़ॉल्ट ऑब्जेक्ट आईडी को रखा जाए या ईमेल या यूयूआईडी जैसे कस्टम आईडी का उपयोग किया जाए।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: