GUID के साथ काम करने में कुछ कमियां हैं, जो ज्यादातर मोंगो शेल में बाइनरी प्रतिनिधित्व के साथ काम करने से संबंधित हैं और ऐतिहासिक दुर्घटनाओं से भी संबंधित हैं, जिसके परिणामस्वरूप अलग-अलग ड्राइवर अलग-अलग बाइट ऑर्डर का उपयोग करके GUID को संग्रहीत करते हैं।
मैंने मुद्दों को स्पष्ट करने के लिए निम्नलिखित कोड का उपयोग किया:
var document = new BsonDocument { { "_id", Guid.NewGuid() }, { "x", 1 } };
collection.Drop();
collection.Insert(document);
Console.WriteLine("Inserted GUID: {0}", document["_id"].AsGuid);
जो जब मैंने इसे आउटपुट चलाया:
Inserted GUID: 2d25b9c6-6d30-4441-a360-47e7804c62be
जब मैं इसे मोंगो शेल में प्रदर्शित करता हूं तो मुझे मिलता है:
> var doc = db.test.findOne()
> doc
{ "_id" : BinData(3,"xrklLTBtQUSjYEfngExivg=="), "x" : 1 }
> doc._id.hex()
c6b9252d306d4144a36047e7804c62be
>
ध्यान दें कि हेक्स के रूप में प्रदर्शित होने पर भी बाइट ऑर्डर मूल GUID से मेल नहीं खाता है। वह ऐतिहासिक दुर्घटना है जिसके बारे में मैं बात कर रहा था। सभी बाइट मौजूद हैं, वे माइक्रोसॉफ्ट के Guid.ToByteArray() के कार्यान्वयन के लिए एक असामान्य क्रम में हैं।
मोंगो शेल में GUID के साथ काम करने में आपकी मदद करने के लिए आप हेल्पर फ़ंक्शंस की निम्न फ़ाइल को उस निर्देशिका में कॉपी कर सकते हैं जहाँ mongo.exe संग्रहीत है:
https://github.com/rstam/mongo-csharp -driver/blob/master/uuidhelpers.js
फ़ाइल में शीर्ष पर कुछ संक्षिप्त दस्तावेज़ीकरण टिप्पणियाँ हैं जो आपको मददगार लग सकती हैं। इन कार्यों को मोंगो शेल में उपलब्ध कराने के लिए आपको मोंगो शेल को यह फ़ाइल पढ़ने के लिए बताना होगा क्योंकि यह शुरू होता है। निम्नलिखित नमूना सत्र देखें:
C:\mongodb\mongodb-win32-x86_64-2.0.6\bin>mongo --shell uuidhelpers.js
MongoDB shell version: 2.0.6
connecting to: test
type "help" for help
> var doc = db.test.findOne()
> doc
{ "_id" : BinData(3,"xrklLTBtQUSjYEfngExivg=="), "x" : 1 }
> doc._id.hex()
c6b9252d306d4144a36047e7804c62be
> doc._id.toCSUUID()
CSUUID("2d25b9c6-6d30-4441-a360-47e7804c62be")
>
आप GUID के लिए क्वेरी करने के लिए अन्य सहायक कार्यों का भी उपयोग कर सकते हैं:
> db.test.find({_id : CSUUID("2d25b9c6-6d30-4441-a360-47e7804c62be")})
{ "_id" : BinData(3,"xrklLTBtQUSjYEfngExivg=="), "x" : 1 }
>
जहाँ तक आपके GUID को स्ट्रिंग्स के रूप में संग्रहीत करने की बात है, ऐसा करने की कोई अनसुनी बात नहीं है और यह निश्चित रूप से mongo शेल में डेटा को देखना और क्वेरी करना आसान बनाता है और विभिन्न बाइट ऑर्डर के साथ सभी मुद्दों से बचा जाता है। एकमात्र नुकसान यह है कि यह अधिक स्थान (लगभग दोगुना) का उपयोग करता है।