MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tại sao PyMongo mã hóa uuid.uuid1 () dưới dạng BSON ::Binary?

Tuần tự hóa mặc định cho một uuid Python sử dụng UUID đại diện nhị phân trong đặc tả BSON bởi vì điều này đảm bảo sắp xếp nhất quán cho các truy vấn phạm vi và cũng sử dụng ít bộ nhớ hơn cho dữ liệu / chỉ mục.

Ví dụ:ba chuỗi này tương đương với nhau trong hệ lục phân:

5d78ad35ea5f11e1a183705681b29c47
5D78AD35EA5F11E1A183705681B29C47
5d78ad35ea5f11e1A183705681B29C47

..nhưng có các thứ tự sắp xếp khác nhau dưới dạng chuỗi:

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

So sánh các kích thước 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

Nếu bạn muốn chèn dưới dạng chuỗi, bạn có thể sử dụng UUID.hex để lấy chuỗi 32 ký tự tương đương:

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

Nếu bạn muốn tìm UUID theo chuỗi từ Python, bạn có thể sử dụng uuid. UUID phương pháp:

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

Nếu bạn muốn tìm UUID theo chuỗi từ mongo shell, có một UUID() người trợ giúp:

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

Lưu ý:có một số loại phụ UUID khác có sẵn để tương tác với các phiên bản trình điều khiển khác, như được mô tả trong Tài liệuAPI cho bson.binary .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB phân biệt giữa undefined và null

  2. mongoDB:Tạo một ObjectId cho mỗi phần tử con mới được thêm vào trường mảng

  3. Trích xuất Decimal từ Decimal128 với Mongoose - MongoDB

  4. CURSOR_NOT_FOUND - công việc cron của tôi bắt đầu chết dần giữa chừng

  5. Tìm kiếm toàn văn trên MongoDB GridFS?