MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Dlaczego PyMongo koduje uuid.uuid1() jako BSON::Binary?

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 .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dlaczego sterownik węzła MongoDB generujący pulę instancji powoduje zniszczenie błędów?

  2. Jakie są zalety korzystania z bazy danych pozbawionej schematów, takiej jak MongoDB, w porównaniu z relacyjną bazą danych?

  3. Zastąp osadzony dokument przy użyciu sterownika Mongo C# 2.0

  4. znajdź według _id z Mongoose

  5. Wymuszanie kontroli dostępu opartej na rolach za pomocą ClusterControl