2012-01-04 17 views
17

में अद्वितीय ऑब्जेक्ट आईडी कैसे उत्पन्न करें जब मैं जावा के साथ मोंगोड का उपयोग करता हूं, तो मैं क्लाइंट पर ऑब्जेक्ट आईडी उत्पन्न करना चाहता हूं। एक रिकॉर्ड डालने से पहले, हालांकि, मुझे यह सुनिश्चित करने के लिए पहले mongodb से पूछना होगा कि ऑब्जेक्टआईडी() विधि द्वारा उत्पन्न आईडी अद्वितीय है। क्या कोई तरीका है कि मैं मोंगोडब को दो बार एक्सेस किए बिना अद्वितीय ऑब्जेक्ट आईडी उत्पन्न कर सकता हूं?mongodb

उत्तर

18

ऑब्जेक्ट आईडी अनुक्रमिक आईडी की तरह नहीं हैं जो आप आरडीएमएस में उपयोग करते हैं। यदि वे Object ID specification के अनुसार ठीक तरह से उत्पन्न होते हैं तो आपको उनके बारे में चिंता करने की आवश्यकता नहीं होगी।

आपको बस इतना करना है कि आप हमेशा उनका उपयोग करने के बजाय एक नया ऑब्जेक्ट आईडी बनाएं।

+2

तो यदि मैं आईडी उत्पन्न करता हूं: ObjectId id = new ObjectId(); तो आईडी पहले से ही अद्वितीय होना चाहिए? धन्यवाद – NOrder

+1

@ विएना सही। जब भी आप डेटाबेस में रिकॉर्ड सहेजते हैं तो आपको बस इसे कॉल करना सुनिश्चित करना होगा। –

42

आप क्लाइंट पर परामर्श किए बिना ऑब्जेक्ट आईडी बना सकते हैं। ऐसी आईडी अद्वितीय होगी (आपको दो समान ऑब्जेक्ट आईडी प्राप्त करने के लिए कड़ी मेहनत करनी होगी)।

ObjectId id = new ObjectId(); 

// or this 
ObjectId id = ObjectId.get(); 
+0

उन दो तरीकों के बीच एक अंतर Theres? चीयर्स – DanielPanic

+0

कोई फर्क नहीं पड़ता। ObjectId # बस कन्स्ट्रक्टर को कॉल करें। –

+0

यह कैसे काम करता है? क्या यह जावास्क्रिप्ट है? – Jennifer

4

मोंगोडीबी जावा चालक 3.3.0 के रूप में, ऑब्जेक्ट आईडी बनाने के लिए निम्नलिखित तरीके हैं।

पैरामीटर के बिना निर्माता का उपयोग करना:प्रदान करता है अद्वितीय ObjectId

1. ObjectId id1 = new ObjectId(); //Generates unique id 

    1.1. ObjectId id2 = ObjectId.get(); //Calls new ObjectId(); 

पैरामिट्रीकृत कंस्ट्रक्टर्स का उपयोग करना:पैरामीटर ObjectId

2. public ObjectId(byte[] bytes) // Receives a byte array of size 12. 

3. public ObjectId(String hexString) //Receives a String that is a hexadecimal representation of 12 bytes. 

4. public ObjectId(Date date) // Receives a Date object 

5. public ObjectId(Date date, int counter) //Receives date and a counter 

6. public ObjectId(Date date, 
      int machineIdentifier, 
      short processIdentifier, 
      int counter) //Receives Date, MachineId, PID and counter. 

7. public ObjectId(int timestamp, 
      int machineIdentifier, 
      short processIdentifier, 
      int counter) //Receives Epoch time in sec, MachineId, PID and counter. 

समझौता objecti की विशिष्टता को प्रभावित घ:

ObjectId, 12 बाइट्स के होते हैं इस प्रकार विभाजित:

   ObjectID layout 

0 1 2 3 4 5 6 7 8 9 10 11 

|time   |machine |pid |inc  |