आंद्रे ने जो कहा उस पर थोड़ा विस्तार करने के लिए:
चूंकि ऑब्जेक्टआईडी टाइमस्टैम्प केवल दूसरे के लिए है, इसलिए टाइमस्टैम्प (पहले 4 बाइट्स) के लिए समान मान के साथ दो (या अधिक) ऑब्जेक्ट आसानी से बनाए जा सकते हैं। यदि ये एक ही मशीन (मशीन आईडी - अगले 3 बाइट्स), उसी प्रक्रिया (पीआईडी - अगले 2 बाइट्स) पर बनाए गए थे, तो उन्हें अलग करने वाली एकमात्र चीज "इंक" फ़ील्ड होगी, अंतिम 3 बाइट्स अंत में।
अपडेट करें:जनवरी 2020
यह उत्तर लोकप्रिय बना हुआ है इसलिए यह थोड़ा अपडेट करने लायक है। ऑब्जेक्टिड स्पेक विकसित हुआ है क्योंकि यह उत्तर 8 साल पहले लिखा गया था और टाइमस्टैम्प के बाद 5 बाइट अब बस यादृच्छिक हैं, जो किसी भी टकराव की संभावना को काफी कम कर देगा। अंतिम तीन बाइट्स अभी भी वृद्धिशील हैं, लेकिन शुरू करने के लिए एक यादृच्छिक मूल्य पर शुरू किया गया है, फिर से टकराव कम होने की संभावना है। ऑब्जेक्ट आईडी में अब कम संदर्भ है (आप आसानी से नहीं बता सकते कि यह कहां और किस प्रक्रिया से उत्पन्न हुआ था) लेकिन मुझे लगता है कि जानकारी का किसी भी सार्थक तरीके से उपयोग नहीं किया जा रहा था और आईडी के बेहतर यादृच्छिककरण के पक्ष में बहिष्कृत कर दिया गया है।
अपडेट समाप्त करें
पूरी कल्पना के लिए यहां देखें:
https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification
वह "इंक" फ़ील्ड या तो एक कभी बढ़ता हुआ क्षेत्र है (तब आप उचित रूप से इस प्रकार को सम्मिलित/बनाने के क्रम में होने की उम्मीद कर सकते हैं) या एक यादृच्छिक मान (तब अद्वितीय होने की संभावना है, लेकिन आदेश नहीं दिया गया है), यह मानते हुए कि युक्ति सही ढंग से लागू की गई है . ध्यान दें कि ऑब्जेक्ट आईडी ड्राइवर, या एप्लिकेशन (या वास्तव में मैन्युअल रूप से) द्वारा उत्पन्न किया जा सकता है, न कि MongoDB द्वारा, इसलिए जब तक आपके पास इस पर पूर्ण नियंत्रण नहीं है कि वे कैसे उत्पन्न होते हैं, तो उपरोक्त में से कोई भी या सभी लागू हो सकते हैं।