MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगो से स्ट्रिंग के रूप में बिनडाटा यूयूआईडी प्राप्त करें

आपके प्रश्न का उत्तर अधिक जटिल है जिसकी आप अपेक्षा करेंगे! मुख्य कारण यह जटिल है कि ऐतिहासिक कारणों से (दुर्भाग्य से) विभिन्न ड्राइवरों ने अलग-अलग बाइट ऑर्डर का उपयोग करके डेटाबेस में यूयूआईडी लिखा है। आप यह उल्लेख नहीं करते कि आप किस ड्राइवर का उपयोग कर रहे हैं, लेकिन मैं उदाहरण के तौर पर C# ड्राइवर का उपयोग करूंगा।

मान लीजिए कि मैं एक दस्तावेज़ सम्मिलित करने के लिए निम्नलिखित कोड का उपयोग करता हूँ:

var guid = new Guid("00112233-4455-6677-8899-aabbccddeeff");
collection.Insert(new BsonDocument {
    { "_id", guid },
    { "x", 1 }
});

अगर मैं मोंगो शेल का उपयोग करके दस्तावेज़ की जांच करता हूं, तो यह इस तरह दिखता है:

> db.test.findOne()
{ "_id" : BinData(3,"MyIRAFVEd2aImaq7zN3u/w=="), "x" : 1 }
>

मोंगो शेल में हेक्स नामक एक अंतर्निहित फ़ंक्शन होता है जिसका उपयोग आप बाइनरी मान को हेक्स स्ट्रिंग के रूप में प्रदर्शित करने के लिए कर सकते हैं:

> var doc = db.test.findOne()
> doc._id.hex()
33221100554477668899aabbccddeeff
>

ध्यान से देखें:हेक्स स्ट्रिंग का बाइट क्रम C# प्रोग्राम में उपयोग किए गए मूल UUID मान से मेल नहीं खाता। ऐसा इसलिए है क्योंकि सी # ड्राइवर गाइड क्लास के माइक्रोसॉफ्ट के ToByteArray विधि द्वारा लौटाए गए बाइट ऑर्डर का उपयोग करता है (जो दुख की बात है कि बाइट्स को एक विचित्र क्रम में लौटाता है, जो तथ्य कई महीनों तक नहीं खोजा गया था)। अन्य ड्राइवरों की अपनी अलग पहचान होती है।

इसमें मदद करने के लिए हमारे पास जावास्क्रिप्ट में लिखे गए कुछ सहायक कार्य हैं जिन्हें मोंगो खोल में लोड किया जा सकता है। वे इस फ़ाइल में परिभाषित हैं:

https://github.com/mongodb/mongo-csharp-driver/blob/master/uuidhelpers.js

मानगो शेल को फ़ाइल को संसाधित करने के लिए कहा जा सकता है क्योंकि यह कमांड लाइन पर फ़ाइल का नाम प्रदान करके शुरू होता है (साथ में --shell तर्क)। इस फ़ाइल को लोड करने के बाद हमारे पास यूयूआईडी जैसे बिनडाटा मान बनाने और प्रदर्शित करने के लिए कई सहायक कार्यों तक पहुंच है। उदाहरण के लिए:

C:\mongodb\mongodb-win32-x86_64-2.0.1\bin>mongo --shell uuidhelpers.js
MongoDB shell version: 2.0.1
connecting to: test
type "help" for help
> var doc = db.test.findOne()
> doc._id.toCSUUID()
CSUUID("00112233-4455-6677-8899-aabbccddeeff")
> db.test.find({_id : CSUUID("00112233-4455-6677-8899-aabbccddeeff")})
{ "_id" : BinData(3,"MyIRAFVEd2aImaq7zN3u/w=="), "x" : 1 }
>

इस उदाहरण में toCSUUID फ़ंक्शन का उपयोग BinData मान को CSUUID के रूप में प्रदर्शित करने के लिए किया जाता है और CSUUID फ़ंक्शन का उपयोग C# ड्राइवर के बाइट ऑर्डरिंग सम्मेलनों का उपयोग करके UUID के लिए BinData मान बनाने के लिए किया जाता है ताकि हम UUID पर क्वेरी कर सकें। अन्य ड्राइवरों के लिए समान कार्य हैं (toJUUID, toPYUUID, JUUID, PYUUID)।

भविष्य में किसी दिन सभी ड्राइवर एक मानक बाइट ऑर्डर के साथ एक नए बाइनरी सबटाइप 4 पर मानकीकरण करेंगे। इस बीच आपको उपयुक्त सहायक फ़ंक्शन का उपयोग करना होगा जो आपके द्वारा उपयोग किए जा रहे किसी भी ड्राइवर से मेल खाता हो।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. सरणियों की तुलना करें और अंतर लौटाएं

  2. हरोकू ऐप को एटलस मोंगोडीबी क्लाउड सेवा से जोड़ना

  3. मोंगोडीबी $exp

  4. मोंगो का कमांड लाइन प्रमाणीकरण विफल रहता है

  5. MongoDB $पुल सरणी 2 स्तर