2012-03-14 18 views
49

में "आईडी" और "_id" फ़ील्ड के बीच अंतर क्या मोंगोडीबी दस्तावेज़ से फ़ील्ड आईडी या _ID का उपयोग करने में कोई अंतर है?मोंगोडीबी

मैं इस पूछ रहा हूँ, क्योंकि मैं आमतौर पर "_ id" का उपयोग, फिर भी मैं इस तरह देखा ({आईडी: -1}) दस्तावेज में: http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Sortbyidtosortbyinsertiontime

संपादित

बाहर डॉक्स में बदल जाता है गलत थे।

उत्तर

43

मुझे उम्मीद है कि यह दस्तावेज़ीकरण में सिर्फ एक टाइपो है। प्रत्येक दस्तावेज़ के लिए _id फ़ील्ड प्राथमिक कुंजी है। इसे _id कहा जाता है और id के माध्यम से भी पहुंचा जा सकता है। id कुंजी का उपयोग करने का प्रयास करने से illegal ObjectId format त्रुटि हो सकती है।

वह अनुभाग केवल यह इंगित कर रहा है कि स्वचालित रूप से जेनरेट किए गए ऑब्जेक्ट आईडी एक टाइमस्टैम्प से शुरू होते हैं, इसलिए आपके दस्तावेज़ों को स्वचालित रूप से सॉर्ट करना संभव है। यह बहुत अच्छा है क्योंकि _id स्वचालित रूप से प्रत्येक संग्रह में अनुक्रमित होता है। अधिक जानकारी के लिए http://www.mongodb.org/display/DOCS/Object+IDs देखें। विशेष रूप से "बीएसओएन ऑब्जेक्टिड विशिष्टता" के तहत।

एक BSON ObjectID एक 12-बाइट एक 4-बाइट टाइमस्टैम्प की (अवधि के बाद सेकंड), एक 3-बाइट मशीन आईडी, 2-बाइट प्रक्रिया आईडी, और एक 3-बाइट काउंटर मिलकर मूल्य है। ध्यान दें कि टाइमस्टैम्प और काउंटर फ़ील्ड को बाकी बीएसओएन के विपरीत बड़े एंडियन स्टोर किया जाना चाहिए।

+6

संग्रह के प्रत्येक दस्तावेज़ के लिए '_id' अनिवार्य है? दूसरे शब्दों में, क्या मैं '_id' फ़ील्ड के बिना एक नया दस्तावेज़ बना सकता हूं? –

+2

@ केविन मैरिडिथ निर्दिष्ट [यहां] (https://docs.mongodb.com/manual/reference/bson-types/#objectid), हां, एक '_id' फ़ील्ड अनिवार्य है।«MongoDB में, संग्रह में संग्रहीत प्रत्येक दस्तावेज़ के लिए एक अद्वितीय' _id' फ़ील्ड की आवश्यकता होती है जो प्राथमिक कुंजी के रूप में कार्य करता है। यदि कोई सम्मिलित दस्तावेज़ '_id' फ़ील्ड को छोड़ देता है, तो MongoDB ड्राइवर स्वचालित रूप से' _id' फ़ील्ड »के लिए 'ऑब्जेक्ट आईडी' उत्पन्न करता है। – BowPark

10

_id फ़ील्ड बीसन ऑब्जेक्ट आईडी के लिए डिफ़ॉल्ट फ़ील्ड है और यह डिफ़ॉल्ट रूप से अनुक्रमित है।

_id और आईडी समान नहीं हैं। यदि आप चाहें तो id नामक फ़ील्ड जोड़ने का भी चयन कर सकते हैं, लेकिन जब तक आप कोई इंडेक्स नहीं जोड़ते तब तक यह इंडेक्स नहीं होगा।

यह दस्तावेज़ों में सिर्फ एक टाइपो है।

1

आईडी mongoid.id में _id के लिए उपनाम है दस्तावेज़ के _id को वापस कर देगा। https://github.com/mongodb/mongoid/blob/master/lib/mongoid/fields.rb#L47

यदि _id फ़ील्ड निर्दिष्ट नहीं है ऑब्जेक्ट आईडी स्वचालित रूप से जेनरेट की जाती है।

0

मेरे दो सेंट:

_ id क्षेत्र

MongoDB प्रत्येक दस्तावेज़ के लिए एक _id क्षेत्र प्रदान करती है और उस पर प्राथमिक सूचकांक प्रदान करती है। ऐसे तरीके हैं जिनसे हम माध्यमिक सूचकांक भी लागू कर सकते हैं। डिफ़ॉल्ट रूप से, MongoDB_id प्रकार ObjectID के प्रकार के मान बनाता है। यह मान BSON कल्पना में परिभाषित किया गया है और यह इस तरह से संरचित है:

ObjectID (12 बाइट्स हेक्स स्ट्रिंग) = तारीख (4 बाइट, यूनिक्स अवधि के बाद सेकंड की संख्या का प्रतिनिधित्व एक टाइमस्टैम्प मूल्य) + मैक पता (3 बाइट्स) + पीआईडी ​​(2 बाइट्स) + काउंटर (3 बाइट्स)