sql >> Database >  >> NoSQL >> MongoDB

Waarom codeert PyMongo uuid.uuid1() als een BSON::Binary?

De standaard serialisatie voor een Python uuid gebruikt een UUID binaire weergave in de BSON-specificatie omdat dit zorgt voor een consistente sortering voor bereikquery's en ook minder opslagruimte gebruikt voor gegevens/indexen.

Deze drie strings zijn bijvoorbeeld equivalent in hex:

5d78ad35ea5f11e1a183705681b29c47
5D78AD35EA5F11E1A183705681B29C47
5d78ad35ea5f11e1A183705681B29C47

..maar hebben verschillende sorteervolgorden als strings:

> db.uuidsort.find().sort({_id:1})
{ "_id" : "5D78AD35EA5F11E1A183705681B29C47" }
{ "_id" : "5d78ad35ea5f11e1A183705681B29C47" }
{ "_id" : "5d78ad35ea5f11e1a183705681b29c47" }

De bson-maten vergelijken:

> 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

Als u als strings wilt invoegen, kunt u UUID.hex gebruiken om het tekenreeksequivalent van 32 tekens te krijgen:

>>> db.uuidtest.insert({'_id': uuid.hex})
'5d78ad35ea5f11e1a183705681b29c47'

Als u UUID's per string van Python wilt vinden, kunt u de uuid gebruiken. UUID methoden:

>>> db.uuidtest.find_one({'_id':uuid.UUID('5d78ad35ea5f11e1a183705681b29c47')})
{u'_id': UUID('5d78ad35-ea5f-11e1-a183-705681b29c47')}

Als u UUID's wilt vinden op tekenreeks van de mongo shell, is er een UUID() helper:

> db.uuidtest.find({_id:UUID('5d78ad35ea5f11e1a183705681b29c47')})
{ "_id" : BinData(3,"XXitNepfEeGhg3BWgbKcRw==") }

Opmerking:er zijn een paar andere UUID-subtypen beschikbaar voor interoperabiliteit met andere stuurprogrammaversies, zoals beschreven in de API-documenten voor bson.binary .




  1. CDH 6.2-release:wat is er nieuw in HBase

  2. Hoe gegevens ophalen van MongoDB?

  3. Itereer over Mongodb-cursor van aggregaat

  4. Mongodb PHP - Gehele getallen met decimalen