Odpověď na vaši otázku je složitější, než byste čekali! Hlavním důvodem, proč je to komplikované, je to, že z historických důvodů (bohužel) různé ovladače zapisovaly UUID do databáze pomocí různých pořadí bajtů. Neuvádíte, který ovladač používáte, ale jako příklad použiji ovladač C#.
Předpokládejme, že pro vložení dokumentu používám následující kód:
var guid = new Guid("00112233-4455-6677-8899-aabbccddeeff");
collection.Insert(new BsonDocument {
{ "_id", guid },
{ "x", 1 }
});
Pokud poté dokument prozkoumám pomocí prostředí Mongo, bude vypadat takto:
> db.test.findOne()
{ "_id" : BinData(3,"MyIRAFVEd2aImaq7zN3u/w=="), "x" : 1 }
>
Shell Mongo má vestavěnou funkci zvanou hex, kterou můžete použít k zobrazení binární hodnoty jako hexadecimálního řetězce:
> var doc = db.test.findOne()
> doc._id.hex()
33221100554477668899aabbccddeeff
>
Podívejte se pozorně:pořadí bajtů hexadecimálního řetězce neodpovídá původní hodnotě UUID použité v programu C#. Je to proto, že ovladač C# používá pořadí bajtů vrácené metodou ToByteArray společnosti Microsoft třídy Guid (která bohužel vrací bajty v bizarním pořadí, což nebylo mnoho měsíců objeveno). Ostatní ovladače mají své vlastní zvláštnosti.
Abychom s tím pomohli, máme některé pomocné funkce napsané v Javascriptu, které lze načíst do prostředí Mongo. Jsou definovány v tomto souboru:
https://github.com/mongodb/mongo-csharp-driver/blob/master/uuidhelpers.js
Mongo shellu lze říci, aby zpracoval soubor při jeho spouštění, zadáním názvu souboru na příkazovém řádku (spolu s argumentem --shell). Po načtení tohoto souboru máme přístup k řadě pomocných funkcí pro vytvoření a zobrazení hodnot BinData, které jsou UUID. Například:
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 }
>
V tomto příkladu se funkce toCSUUID používá k zobrazení hodnoty BinData jako CSUUID a funkce CSUUID se používá k vytvoření hodnoty BinData pro UUID pomocí konvencí řazení bajtů ovladače C#, abychom mohli dotazovat na UUID. Pro ostatní ovladače existují podobné funkce (toJUUID, toPYUUID, JUUID, PYUUID).
Jednoho dne v budoucnu se všechny ovladače standardizují na nový binární podtyp 4 se standardním pořadím bajtů. Mezitím musíte použít vhodnou pomocnou funkci, která odpovídá jakémukoli ovladači, který používáte.