Domyślna serializacja dla uuid
Pythona używa UUID
reprezentacja binarna w specyfikacji BSON
ponieważ zapewnia to spójne sortowanie zapytań o zakres, a także zużywa mniej miejsca na dane/indeksy.
Na przykład te trzy ciągi są równoważne w kodzie szesnastkowym:
5d78ad35ea5f11e1a183705681b29c47
5D78AD35EA5F11E1A183705681B29C47
5d78ad35ea5f11e1A183705681B29C47
..ale mają różne porządki sortowania jako ciągi:
> db.uuidsort.find().sort({_id:1})
{ "_id" : "5D78AD35EA5F11E1A183705681B29C47" }
{ "_id" : "5d78ad35ea5f11e1A183705681B29C47" }
{ "_id" : "5d78ad35ea5f11e1a183705681b29c47" }
Porównanie rozmiarów bsonów:
> db.uuidtest.find()
{ "_id" : BinData(3,"XXitNepfEeGhg3BWgbKcRw==") }
{ "_id" : "5d78ad35ea5f11e1a183705681b29c47" }
> Object.bsonsize(db.uuidtest.findOne({_id: BinData(3,"XXitNepfEeGhg3BWgbKcRw==")}))
31
> Object.bsonsize(db.uuidtest.findOne({_id: "5d78ad35ea5f11e1a183705681b29c47"}))
47
Jeśli chcesz wstawić jako ciągi, możesz użyć UUID.hex aby uzyskać odpowiednik 32-znakowego ciągu:
>>> db.uuidtest.insert({'_id': uuid.hex})
'5d78ad35ea5f11e1a183705681b29c47'
Jeśli chcesz znaleźć UUID według ciągu znaków z Pythona, możesz użyć uuid. UUID metody:
>>> db.uuidtest.find_one({'_id':uuid.UUID('5d78ad35ea5f11e1a183705681b29c47')})
{u'_id': UUID('5d78ad35-ea5f-11e1-a183-705681b29c47')}
Jeśli chcesz znaleźć UUID według ciągu z mongo
powłoki, istnieje UUID()
pomocnik:
> db.uuidtest.find({_id:UUID('5d78ad35ea5f11e1a183705681b29c47')})
{ "_id" : BinData(3,"XXitNepfEeGhg3BWgbKcRw==") }
Uwaga:istnieje kilka innych podtypów UUID dostępnych do współdziałania z innymi wersjami sterowników, jak opisano w Dokumentacja API dla bson.binary .