MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Защо PyMongo кодира uuid.uuid1() като BSON::Binary?

Сериализацията по подразбиране за Python uuid използва UUID двоично представяне в BSON спецификация тъй като това гарантира последователно сортиране за заявки за диапазон и също така използва по-малко място за съхранение на данни/индекси.

Например тези три низа са еквивалентни в шестнадесетичен:

5d78ad35ea5f11e1a183705681b29c47
5D78AD35EA5F11E1A183705681B29C47
5d78ad35ea5f11e1A183705681B29C47

..но имат различен ред на сортиране като низове:

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

Сравняване на размерите на 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

Ако искате да вмъкнете като низове, можете да използвате UUID.hex за да получите еквивалента на низ от 32 знака:

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

Ако искате да намерите UUID по низ от Python, можете да използвате uuid. UUID методи:

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

Ако искате да намерите UUID по низ от mongo shell, има UUID() помощник:

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

Забележка:има няколко други подтипа на UUID за оперативна съвместимост с други версии на драйвери, както е описано в документи за API за bson.binary .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Разлики между com.mongodb.client.MongoClient и com.mongodb.MongoClient

  2. В MongoDb, как да приложите вътрешни полета за сортиране, присъстващи в документа?

  3. Не може да се стартира mongo контейнер с набор от реплики, използвайки docker-compose

  4. Как да конвертирате BasicDBObject в Mongo документ с Java Mongo DB драйвер версия 3?

  5. Groupby в MongoTemplate връща празни полета