2013-04-06 2 views
6

उदाहरण के लिए, यदि मैं डिफ़ॉल्ट रूप से "_id" होने के बजाय अपने मोंगो दस्तावेज़ की अद्वितीय आईडी के रूप में उपयोगकर्ता नाम रखना चाहता हूं तो क्या होगा?मोंगोडीबी: मोंगो दस्तावेज़ की आईडी के रूप में एक और फ़ील्ड (_id से अलग) कैसे सेट करें?

मैं mongo.exe कंसोल का उपयोग करके इसे प्राप्त करना चाहता हूं।

+2

यदि उपयोगकर्ता नाम कभी भी बदल सकते हैं, और वे अन्य दस्तावेजों में उपयोग किए जाते हैं, तो मैं आपको सलाह दूंगा कि आप उन्हें प्राथमिक कुंजी ('_id') न बनाएं क्योंकि आपको नए उपयोगकर्ता नाम को इंगित करने वाले सभी स्थानों को अपडेट करने की आवश्यकता होगी (और आपके पास समय-समय पर समस्या होगी क्योंकि मोंगोडीबी में लेनदेन नहीं हैं)। – WiredPrairie

उत्तर

14

MongoDB को _id प्रॉपर्टी को अद्वितीय प्राथमिक कुंजी के रूप में स्वचालित रूप से अनुक्रमित करने की आवश्यकता होती है।

  1. _ id संपत्ति का उपयोग करें और उपयोगकर्ता नाम के साथ यह सेट:

    आपके पास दो विकल्प।

  2. उपयोगकर्ता नाम संपत्ति बनाएं, फिर उस नई संपत्ति पर एक अनुक्रमणिका जोड़ें। आपके पास अभी भी _id होगा, लेकिन उपयोगकर्ता नाम का उपयोग कर क्वेरी कर सकते हैं।
+1

मुझे पता है कि ऐसा रिकॉर्ड होना संभव है जैसे उपयोगकर्ता नाम: "जॉन", आयु: 12}। मेरा मतलब है, बिना _id। यह कैसे करना है? – Andrei

+2

आप _id को क्यों हटाना चाहते हैं? – cirrus

+3

जब आप उपयोगकर्ता नाम इंडेक्स को परिभाषित करते हैं तो आपको इसकी आवश्यकता हो सकती है कि यह अद्वितीय है, अगर यह आपकी चिंता है। _id छोटा और सहायक है। बस इसे अकेला छोड़ दें और इसे तब तक अनदेखा करें जब तक कि आप मोंगोड को बेहतर समझ न लें। – Leopd

0

मुझे पता है, कि यह {उपयोगकर्ता नाम: "जॉन", उम्र: 12} की तरह इस तरह के रिकॉर्ड रखना संभव नहीं है। मेरा मतलब है, बिना _id। यह कैसे करना है?

मुझे यकीन नहीं है कि कैसे @ सर्ज का जवाब पर्याप्त स्पष्ट नहीं था, फिर से पुन: पुनरावृत्त करने के लिए, कोई रास्ता नहीं है। तकनीकी रूप से आप अभी भी मोंगोडीबी के कुछ संस्करणों में एक कैप्ड संग्रह में _id निकाल सकते हैं, इसके अलावा, आप इसके अलावा नहीं कर सकते हैं।

इसके अलावा, मैं उपयोगकर्ता नाम का उपयोग कर यह चिंतित हूँ, यह इस तरह sharding जैसी गतिविधियों के लिए सबसे अच्छी बात नहीं हो सकता है और समूहों आदि पर उच्च acitivty की "हॉटस्पॉट" बना सकते हैं, यह सब सैद्धांतिक है के बाद से मैं अपनी स्थिति में नहीं हूँ हालांकि, आपके डेटा के साथ, इस सामान पर विचार करना सबसे अच्छा है।

+0

का उपयोग करके अपने प्रश्न परिणामों से' _id' को उजागर कर सकते हैं, उत्तर के लिए धन्यवाद, लेकिन मैं सिर्फ यह जानना चाहता हूं कि यह कैसे संभव है। मुझे कुछ और विवरण प्रदान करने दें। मैं .NET ड्राइवर का उपयोग कर रहा हूं और मैं इस तरह कोड कर सकता हूं: कक्षा उपयोगकर्ता { [BsonId] सार्वजनिक स्ट्रिंग उपयोगकर्ता नाम {प्राप्त करें; सेट; } सार्वजनिक स्ट्रिंग पासवर्ड {प्राप्त करें; सेट; } } जब मैं इस तरह की कक्षा को मोंगोडब में डालता हूं, तो मुझे बिना किसी आईडी के ऑब्जेक्ट मिल रहा है, और मुझे जानकर उत्सुकता है कि चालक इस वस्तु की व्याख्या कैसे करता है। ऑपरेशन कैसा दिखता है? – Andrei

+0

@AndreiMikhalevich रुको, "जब मैंने इस तरह की कक्षा को मोंगोडब में रखा, तो मुझे बिना किसी आईडी के ऑब्जेक्ट मिल रहा है," तुम्हारा क्या मतलब है? क्या आप कह रहे हैं कि आप _id के साथ ऑब्जेक्ट को सहेज रहे हैं और इसमें डेटाबेस में कोई _id नहीं है? यह असंभव माना जाता है – Sammaye

+0

@AndreiMikhalevich: यदि आप बिना किसी _ _id' के ऑब्जेक्ट डालते हैं, तो सी # ड्राइवर आपके लिए एक उत्पन्न करेगा।एक मोंडोडीबी दस्तावेज़ के लिए '_id' एक आवश्यक प्राथमिक कुंजी है; आप अपने स्वयं के पहचानकर्ताओं का उपयोग करना या डिफ़ॉल्ट [ऑब्जेक्टआईडी] (http://docs.mongodb.org/manual/reference/object-id/) का उपयोग करना चुन सकते हैं। – Stennie

1

_id प्रतिकृति में महत्वपूर्ण है। आप _id अनुक्रमणिका के बिना संग्रह बना सकते हैं, लेकिन आप कभी भी डेटाबेस को दोहराने में सक्षम नहीं होंगे। प्रतिकृति के लिए प्रत्येक संग्रह पर _id अनुक्रमणिका की आवश्यकता होती है।

संबंधित मुद्दे