La serializzazione predefinita per un Python uuid
utilizza un UUID
rappresentazione binaria nella specifica BSON
perché ciò garantisce un ordinamento coerente per le query di intervallo e utilizza anche meno spazio di archiviazione per dati/indici.
Ad esempio, queste tre stringhe sono equivalenti in esadecimale:
5d78ad35ea5f11e1a183705681b29c47
5D78AD35EA5F11E1A183705681B29C47
5d78ad35ea5f11e1A183705681B29C47
..ma hanno diversi tipi di ordinamento come stringhe:
> db.uuidsort.find().sort({_id:1})
{ "_id" : "5D78AD35EA5F11E1A183705681B29C47" }
{ "_id" : "5d78ad35ea5f11e1A183705681B29C47" }
{ "_id" : "5d78ad35ea5f11e1a183705681b29c47" }
Confrontando le dimensioni dei bson:
> 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
Se vuoi inserire come stringhe, puoi usare UUID.hex per ottenere l'equivalente della stringa di 32 caratteri:
>>> db.uuidtest.insert({'_id': uuid.hex})
'5d78ad35ea5f11e1a183705681b29c47'
Se vuoi trovare gli UUID per stringa da Python, puoi usare uuid. UUID metodi:
>>> db.uuidtest.find_one({'_id':uuid.UUID('5d78ad35ea5f11e1a183705681b29c47')})
{u'_id': UUID('5d78ad35-ea5f-11e1-a183-705681b29c47')}
Se vuoi trovare gli UUID per stringa da mongo
shell, c'è un UUID()
aiutante:
> db.uuidtest.find({_id:UUID('5d78ad35ea5f11e1a183705681b29c47')})
{ "_id" : BinData(3,"XXitNepfEeGhg3BWgbKcRw==") }
Nota:sono disponibili alcuni altri sottotipi UUID per l'interoperabilità con altre versioni di driver, come descritto in Documenti API per bson.binary .