Làm cách nào để giải mã UUID bằng Python?

PyMongo vận chuyển với hỗ trợ tích hợp để xử lý các loại UUID. Thật đơn giản để lưu trữ các đối tượng

00112233-4455-6677-8899-aabbccddeeff
3 gốc vào MongoDB và truy xuất chúng dưới dạng các đối tượng
00112233-4455-6677-8899-aabbccddeeff
3 gốc

from pymongo import MongoClient
from bson.binary import UuidRepresentation
from uuid import uuid4

# use the 'standard' representation for cross-language compatibility.
client = MongoClient[uuidRepresentation='standard']
collection = client.get_database['uuid_db'].get_collection['uuid_coll']

# remove all documents from collection
collection.delete_many[{}]

# create a native uuid object
uuid_obj = uuid4[]

# save the native uuid object to MongoDB
collection.insert_one[{'uuid': uuid_obj}]

# retrieve the stored uuid object from MongoDB
document = collection.find_one[{}]

# check that the retrieved UUID matches the inserted UUID
assert document['uuid'] == uuid_obj

Các đối tượng gốc

00112233-4455-6677-8899-aabbccddeeff
3 cũng có thể được sử dụng như một phần của truy vấn MongoDB

document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj

Các ví dụ trên minh họa trường hợp sử dụng đơn giản nhất - trường hợp mà UUID được tạo bởi và được sử dụng trong cùng một ứng dụng. Tuy nhiên, tình huống có thể phức tạp hơn đáng kể khi xử lý việc triển khai MongoDB có chứa các UUID được tạo bởi các trình điều khiển khác vì các trình điều khiển Java và CSharp đã mã hóa các UUID trong lịch sử bằng cách sử dụng thứ tự byte khác với thứ tự được sử dụng bởi PyMongo. Các ứng dụng yêu cầu khả năng tương tác giữa các trình điều khiển này phải chỉ định

00112233-4455-6677-8899-aabbccddeeff
6 thích hợp

Trong các phần sau, chúng tôi mô tả cách các trình điều khiển khác nhau về mặt lịch sử trong mã hóa UUID của chúng và cách các ứng dụng có thể sử dụng tùy chọn cấu hình

00112233-4455-6677-8899-aabbccddeeff
6 để duy trì khả năng tương thích giữa các ngôn ngữ

Chú ý

Các ứng dụng mới không chia sẻ triển khai MongoDB với bất kỳ ứng dụng nào khác và chưa từng lưu trữ UUID trong MongoDB nên sử dụng đại diện UUID của

00112233-4455-6677-8899-aabbccddeeff
8 để tương thích giữa các ngôn ngữ. Xem Định cấu hình Đại diện UUID để biết chi tiết về cách định cấu hình
00112233-4455-6677-8899-aabbccddeeff
6.

Xử lý kế thừa dữ liệu UUID¶

Trong lịch sử, Trình điều khiển MongoDB đã sử dụng các thứ tự byte khác nhau trong khi tuần tự hóa các loại UUID thành

00112233-4455-6677-8899-aabbccddeeff
0. Ví dụ, hãy xem xét một UUID với biểu diễn văn bản chính tắc sau

00112233-4455-6677-8899-aabbccddeeff

UUID này trong lịch sử sẽ được trình điều khiển Python tuần tự hóa dưới dạng

00112233-4455-6677-8899-aabbccddeeff

UUID tương tự trong lịch sử sẽ được trình điều khiển C# tuần tự hóa như

00112233-4455-6677-8899-aabbccddeeff
2

Cuối cùng, cùng một UUID trong lịch sử sẽ được trình điều khiển Java tuần tự hóa thành

00112233-4455-6677-8899-aabbccddeeff
3

Ghi chú

Để biết thông tin chuyên sâu về thứ tự byte được sử dụng trong lịch sử bởi các trình điều khiển khác nhau, hãy xem Xử lý đặc tả loại UUID gốc

Sự khác biệt về thứ tự byte của UUID được mã hóa bởi các trình điều khiển khác nhau có thể dẫn đến hành vi rất không trực quan trong một số trường hợp. Chúng tôi trình bày chi tiết hai kịch bản như vậy trong các phần tiếp theo

cảnh 1. Ứng dụng Chia sẻ Triển khai MongoDB¶

Xem xét tình huống sau

  • Ứng dụng

    00112233-4455-6677-8899-aabbccddeeff
    
    1 được viết bằng C# tạo ra một UUID và sử dụng nó làm
    00112233-4455-6677-8899-aabbccddeeff
    
    2 của một tài liệu mà nó tiến hành chèn vào bộ sưu tập
    00112233-4455-6677-8899-aabbccddeeff
    
    3 của cơ sở dữ liệu
    00112233-4455-6677-8899-aabbccddeeff
    
    4. Giả sử rằng biểu diễn văn bản chuẩn của UUID được tạo là

    00112233-4455-6677-8899-aabbccddeeff
    

  • Ứng dụng

    00112233-4455-6677-8899-aabbccddeeff
    
    5 được viết bằng Python cố gắng
    00112233-4455-6677-8899-aabbccddeeff
    
    6 tài liệu được viết bởi ứng dụng
    00112233-4455-6677-8899-aabbccddeeff
    
    1 theo cách sau

    from pymongo import MongoClient
    from bson.binary import UuidRepresentation
    from uuid import uuid4
    
    # use the 'standard' representation for cross-language compatibility.
    client = MongoClient[uuidRepresentation='standard']
    collection = client.get_database['uuid_db'].get_collection['uuid_coll']
    
    # remove all documents from collection
    collection.delete_many[{}]
    
    # create a native uuid object
    uuid_obj = uuid4[]
    
    # save the native uuid object to MongoDB
    collection.insert_one[{'uuid': uuid_obj}]
    
    # retrieve the stored uuid object from MongoDB
    document = collection.find_one[{}]
    
    # check that the retrieved UUID matches the inserted UUID
    assert document['uuid'] == uuid_obj
    
    2

    Trong trường hợp này,

    00112233-4455-6677-8899-aabbccddeeff
    
    8 sẽ không bao giờ là tài liệu được ứng dụng
    00112233-4455-6677-8899-aabbccddeeff
    
    1 chèn vào ở bước trước. Điều này là do thứ tự byte khác nhau được trình điều khiển C# sử dụng để biểu thị UUID dưới dạng nhị phân BSON. Mặt khác, truy vấn sau đây sẽ tìm thành công tài liệu này

    from pymongo import MongoClient
    from bson.binary import UuidRepresentation
    from uuid import uuid4
    
    # use the 'standard' representation for cross-language compatibility.
    client = MongoClient[uuidRepresentation='standard']
    collection = client.get_database['uuid_db'].get_collection['uuid_coll']
    
    # remove all documents from collection
    collection.delete_many[{}]
    
    # create a native uuid object
    uuid_obj = uuid4[]
    
    # save the native uuid object to MongoDB
    collection.insert_one[{'uuid': uuid_obj}]
    
    # retrieve the stored uuid object from MongoDB
    document = collection.find_one[{}]
    
    # check that the retrieved UUID matches the inserted UUID
    assert document['uuid'] == uuid_obj
    
    5

Ví dụ này cho thấy thứ tự byte khác nhau được sử dụng bởi các trình điều khiển khác nhau có thể cản trở khả năng tương tác như thế nào. Để khắc phục sự cố này, người dùng nên định cấu hình

00112233-4455-6677-8899-aabbccddeeff
20 của họ bằng
00112233-4455-6677-8899-aabbccddeeff
6 thích hợp [trong trường hợp này,
00112233-4455-6677-8899-aabbccddeeff
22 trong ứng dụng
00112233-4455-6677-8899-aabbccddeeff
5 có thể được định cấu hình để sử dụng biểu diễn
00112233-4455-6677-8899-aabbccddeeff
24 nhằm tránh hành vi không trực quan] như được mô tả trong Định cấu hình . .

kịch bản 2. Round-Tripping UUID¶

Trong các ví dụ sau, chúng ta thấy cách sử dụng

00112233-4455-6677-8899-aabbccddeeff
6 bị định cấu hình sai có thể khiến ứng dụng vô tình thay đổi loại phụ
00112233-4455-6677-8899-aabbccddeeff
0 và trong một số trường hợp, chính các byte của trường
00112233-4455-6677-8899-aabbccddeeff
0 khi chuyển vòng tài liệu chứa UUID

Xem xét tình huống sau

00112233-4455-6677-8899-aabbccddeeff
4

Trong ví dụ này, quay vòng tài liệu bằng cách sử dụng sai

00112233-4455-6677-8899-aabbccddeeff
6 [
00112233-4455-6677-8899-aabbccddeeff
29 thay vì
00112233-4455-6677-8899-aabbccddeeff
30] sẽ thay đổi loại phụ
00112233-4455-6677-8899-aabbccddeeff
0 dưới dạng tác dụng phụ. Lưu ý rằng điều này cũng có thể xảy ra khi tình huống đảo ngược - i. e. khi tài liệu gốc được viết bằng cách sử dụng biểu diễn ``STANDARD`` và sau đó được lặp lại bằng cách sử dụng biểu diễn ``PYTHON_LEGACY``

Trong ví dụ tiếp theo, chúng ta thấy hậu quả của việc sử dụng sai cách biểu diễn làm thay đổi thứ tự byte [

00112233-4455-6677-8899-aabbccddeeff
24 hoặc
00112233-4455-6677-8899-aabbccddeeff
33] khi chuyển đổi tài liệu

document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
0

Trong trường hợp này, việc sử dụng sai

00112233-4455-6677-8899-aabbccddeeff
6 [
00112233-4455-6677-8899-aabbccddeeff
33 thay vì
00112233-4455-6677-8899-aabbccddeeff
29] sẽ thay đổi các byte và kiểu phụ của
00112233-4455-6677-8899-aabbccddeeff
0 dưới dạng tác dụng phụ. Lưu ý rằng điều này xảy ra khi bất kỳ biểu diễn nào thao túng thứ tự byte [``CSHARP_LEGACY`` hoặc ``JAVA_LEGACY``] được sử dụng không chính xác cho các UUID khứ hồi được viết bằng ``STANDARD``. Khi tình thế đảo ngược - tôi. e. khi tài liệu gốc được viết bằng cách sử dụng ``CSHARP_LEGACY`` hoặc ``Java_LEGACY`` và sau đó chuyển đổi vòng lặp bằng cách sử dụng ``STANDARD`` - chỉ. tầng lớp. `~bson. nhị phân. Loại phụ nhị phân` được thay đổi

Ghi chú

Bắt đầu từ PyMongo 4. 0, những vấn đề này sẽ được giải quyết khi biểu diễn

00112233-4455-6677-8899-aabbccddeeff
29 sẽ giải mã các trường kiểu con Nhị phân 3 thành các đối tượng kiểu con 3
00112233-4455-6677-8899-aabbccddeeff
0 [thay vì
00112233-4455-6677-8899-aabbccddeeff
3] và mỗi biểu diễn
00112233-4455-6677-8899-aabbccddeeff
1 sẽ giải mã các trường kiểu con nhị phân 4 thành
00112233-4455-6677-8899-aabbccddeeff
0 đối tượng của kiểu con 4 [thay vì

Cấu hình một Đại diện UUID¶

Người dùng có thể giải quyết các sự cố được mô tả ở trên bằng cách định cấu hình ứng dụng của họ bằng

00112233-4455-6677-8899-aabbccddeeff
6 thích hợp. Định cấu hình biểu diễn sẽ sửa đổi hành vi của PyMongo trong khi mã hóa các đối tượng
00112233-4455-6677-8899-aabbccddeeff
3 thành BSON và giải mã các trường loại phụ 3 và 4 nhị phân từ BSON

Các ứng dụng có thể đặt biểu diễn UUID theo một trong các cách sau

  1. Ở cấp độ

    00112233-4455-6677-8899-aabbccddeeff
    
    20 bằng cách sử dụng tùy chọn URI
    00112233-4455-6677-8899-aabbccddeeff
    
    7, e. g

    document = collection.find[{'uuid': uuid_obj}]
    assert document['uuid'] == uuid_obj
    
    1

    Giá trị hợp lệ là

    Giá trị

    Đại diện UUID

    00112233-4455-6677-8899-aabbccddeeff
    
    8

    KHÔNG XÁC ĐỊNH

    00112233-4455-6677-8899-aabbccddeeff
    
    8

    TIÊU CHUẨN

    from pymongo import MongoClient
    from bson.binary import UuidRepresentation
    from uuid import uuid4
    
    # use the 'standard' representation for cross-language compatibility.
    client = MongoClient[uuidRepresentation='standard']
    collection = client.get_database['uuid_db'].get_collection['uuid_coll']
    
    # remove all documents from collection
    collection.delete_many[{}]
    
    # create a native uuid object
    uuid_obj = uuid4[]
    
    # save the native uuid object to MongoDB
    collection.insert_one[{'uuid': uuid_obj}]
    
    # retrieve the stored uuid object from MongoDB
    document = collection.find_one[{}]
    
    # check that the retrieved UUID matches the inserted UUID
    assert document['uuid'] == uuid_obj
    
    20

    PYTHON_LEGACY

    from pymongo import MongoClient
    from bson.binary import UuidRepresentation
    from uuid import uuid4
    
    # use the 'standard' representation for cross-language compatibility.
    client = MongoClient[uuidRepresentation='standard']
    collection = client.get_database['uuid_db'].get_collection['uuid_coll']
    
    # remove all documents from collection
    collection.delete_many[{}]
    
    # create a native uuid object
    uuid_obj = uuid4[]
    
    # save the native uuid object to MongoDB
    collection.insert_one[{'uuid': uuid_obj}]
    
    # retrieve the stored uuid object from MongoDB
    document = collection.find_one[{}]
    
    # check that the retrieved UUID matches the inserted UUID
    assert document['uuid'] == uuid_obj
    
    21

    Java_LEGACY

    from pymongo import MongoClient
    from bson.binary import UuidRepresentation
    from uuid import uuid4
    
    # use the 'standard' representation for cross-language compatibility.
    client = MongoClient[uuidRepresentation='standard']
    collection = client.get_database['uuid_db'].get_collection['uuid_coll']
    
    # remove all documents from collection
    collection.delete_many[{}]
    
    # create a native uuid object
    uuid_obj = uuid4[]
    
    # save the native uuid object to MongoDB
    collection.insert_one[{'uuid': uuid_obj}]
    
    # retrieve the stored uuid object from MongoDB
    document = collection.find_one[{}]
    
    # check that the retrieved UUID matches the inserted UUID
    assert document['uuid'] == uuid_obj
    
    22

    CSHARP_LEGACY

  2. Ở cấp độ

    00112233-4455-6677-8899-aabbccddeeff
    
    20 sử dụng tùy chọn
    00112233-4455-6677-8899-aabbccddeeff
    
    7 kwarg, e. g

    document = collection.find[{'uuid': uuid_obj}]
    assert document['uuid'] == uuid_obj
    
    2

  3. Ở cấp độ

    from pymongo import MongoClient
    from bson.binary import UuidRepresentation
    from uuid import uuid4
    
    # use the 'standard' representation for cross-language compatibility.
    client = MongoClient[uuidRepresentation='standard']
    collection = client.get_database['uuid_db'].get_collection['uuid_coll']
    
    # remove all documents from collection
    collection.delete_many[{}]
    
    # create a native uuid object
    uuid_obj = uuid4[]
    
    # save the native uuid object to MongoDB
    collection.insert_one[{'uuid': uuid_obj}]
    
    # retrieve the stored uuid object from MongoDB
    document = collection.find_one[{}]
    
    # check that the retrieved UUID matches the inserted UUID
    assert document['uuid'] == uuid_obj
    
    25 hoặc
    from pymongo import MongoClient
    from bson.binary import UuidRepresentation
    from uuid import uuid4
    
    # use the 'standard' representation for cross-language compatibility.
    client = MongoClient[uuidRepresentation='standard']
    collection = client.get_database['uuid_db'].get_collection['uuid_coll']
    
    # remove all documents from collection
    collection.delete_many[{}]
    
    # create a native uuid object
    uuid_obj = uuid4[]
    
    # save the native uuid object to MongoDB
    collection.insert_one[{'uuid': uuid_obj}]
    
    # retrieve the stored uuid object from MongoDB
    document = collection.find_one[{}]
    
    # check that the retrieved UUID matches the inserted UUID
    assert document['uuid'] == uuid_obj
    
    26 bằng cách cung cấp phiên bản
    from pymongo import MongoClient
    from bson.binary import UuidRepresentation
    from uuid import uuid4
    
    # use the 'standard' representation for cross-language compatibility.
    client = MongoClient[uuidRepresentation='standard']
    collection = client.get_database['uuid_db'].get_collection['uuid_coll']
    
    # remove all documents from collection
    collection.delete_many[{}]
    
    # create a native uuid object
    uuid_obj = uuid4[]
    
    # save the native uuid object to MongoDB
    collection.insert_one[{'uuid': uuid_obj}]
    
    # retrieve the stored uuid object from MongoDB
    document = collection.find_one[{}]
    
    # check that the retrieved UUID matches the inserted UUID
    assert document['uuid'] == uuid_obj
    
    27 phù hợp, e. g

    document = collection.find[{'uuid': uuid_obj}]
    assert document['uuid'] == uuid_obj
    
    3

Các biểu diễn UUID được hỗ trợ¶

Đại diện UUID

Vỡ nợ?

Mã hóa

00112233-4455-6677-8899-aabbccddeeff
3 thành

Giải mã

00112233-4455-6677-8899-aabbccddeeff
0 tiểu loại 4 thành

Giải mã

00112233-4455-6677-8899-aabbccddeeff
0 tiểu loại 3 thành

TIÊU CHUẨN

Không

00112233-4455-6677-8899-aabbccddeeff
0 tiểu loại 4

00112233-4455-6677-8899-aabbccddeeff
3

00112233-4455-6677-8899-aabbccddeeff
0 tiểu loại 3

KHÔNG XÁC ĐỊNH

Có, trong PyMongo>=4

Tăng

from pymongo import MongoClient
from bson.binary import UuidRepresentation
from uuid import uuid4

# use the 'standard' representation for cross-language compatibility.
client = MongoClient[uuidRepresentation='standard']
collection = client.get_database['uuid_db'].get_collection['uuid_coll']

# remove all documents from collection
collection.delete_many[{}]

# create a native uuid object
uuid_obj = uuid4[]

# save the native uuid object to MongoDB
collection.insert_one[{'uuid': uuid_obj}]

# retrieve the stored uuid object from MongoDB
document = collection.find_one[{}]

# check that the retrieved UUID matches the inserted UUID
assert document['uuid'] == uuid_obj
54

00112233-4455-6677-8899-aabbccddeeff
0 tiểu loại 4

00112233-4455-6677-8899-aabbccddeeff
0 tiểu loại 3

PYTHON_LEGACY

Không

00112233-4455-6677-8899-aabbccddeeff
0 subtype 3 với thứ tự byte tiêu chuẩn

00112233-4455-6677-8899-aabbccddeeff
0 tiểu loại 4

00112233-4455-6677-8899-aabbccddeeff
3

Java_LEGACY

Không

00112233-4455-6677-8899-aabbccddeeff
0 subtype 3 với thứ tự byte kế thừa của Java

00112233-4455-6677-8899-aabbccddeeff
0 tiểu loại 4

00112233-4455-6677-8899-aabbccddeeff
3

CSHARP_LEGACY

Không

00112233-4455-6677-8899-aabbccddeeff
0 loại phụ 3 với thứ tự byte cũ của C#

00112233-4455-6677-8899-aabbccddeeff
0 tiểu loại 4

00112233-4455-6677-8899-aabbccddeeff
3

Bây giờ chúng tôi trình bày chi tiết hành vi và trường hợp sử dụng cho từng đại diện UUID được hỗ trợ

00112233-4455-6677-8899-aabbccddeeff
46¶

Chú ý

Bắt đầu từ PyMongo 4. 0,

00112233-4455-6677-8899-aabbccddeeff
46 là đại diện UUID mặc định được sử dụng bởi PyMongo

Biểu diễn

00112233-4455-6677-8899-aabbccddeeff
46 ngăn chặn việc giải thích sai các byte UUID bằng cách ngừng tự động chuyển đổi các trường UUID trong BSON sang các loại UUID gốc. Thay vào đó, việc giải mã UUID khi sử dụng biểu diễn này sẽ trả về một đối tượng
00112233-4455-6677-8899-aabbccddeeff
0. Nếu được yêu cầu, người dùng có thể ép buộc các đối tượng
00112233-4455-6677-8899-aabbccddeeff
0 đã giải mã thành UUID gốc bằng phương pháp
document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
01 và chỉ định định dạng biểu diễn phù hợp. Ví dụ sau đây cho thấy điều này có thể trông như thế nào đối với UUID được lưu trữ bởi trình điều khiển C#

document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
4

Các đối tượng gốc

00112233-4455-6677-8899-aabbccddeeff
3 không thể được mã hóa trực tiếp thành
00112233-4455-6677-8899-aabbccddeeff
0 khi biểu diễn UUID là
00112233-4455-6677-8899-aabbccddeeff
46 và cố gắng làm như vậy sẽ dẫn đến một ngoại lệ

document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
5

Thay vào đó, các ứng dụng sử dụng

00112233-4455-6677-8899-aabbccddeeff
46 phải ép buộc rõ ràng một UUID gốc bằng phương thức
document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
06

document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
6

00112233-4455-6677-8899-aabbccddeeff
29¶

Chú ý

Biểu diễn UUID này nên được sử dụng bởi các ứng dụng mới hoặc ứng dụng mã hóa và/hoặc giải mã UUID trong MongoDB lần đầu tiên

Biểu diễn

00112233-4455-6677-8899-aabbccddeeff
29 cho phép khả năng tương thích đa ngôn ngữ bằng cách đảm bảo thứ tự byte giống nhau khi mã hóa UUID từ tất cả các trình điều khiển. UUID được viết bởi một trình điều khiển với đại diện này được định cấu hình sẽ được xử lý chính xác bởi mọi trình điều khiển khác miễn là nó cũng được định cấu hình với đại diện
00112233-4455-6677-8899-aabbccddeeff
29

00112233-4455-6677-8899-aabbccddeeff
29 mã hóa các đối tượng
00112233-4455-6677-8899-aabbccddeeff
3 gốc thành các đối tượng loại 4 phụ của
00112233-4455-6677-8899-aabbccddeeff
0

00112233-4455-6677-8899-aabbccddeeff
30¶

Chú ý

Biểu diễn uuid này nên được sử dụng khi đọc các UUID được tạo bởi các ứng dụng hiện có sử dụng trình điều khiển Python nhưng không đặt biểu diễn UUID một cách rõ ràng

Chú ý

00112233-4455-6677-8899-aabbccddeeff
30 là đại diện uuid mặc định trong PyMongo 3

Biểu diễn

00112233-4455-6677-8899-aabbccddeeff
30 tương ứng với biểu diễn cũ của UUID được sử dụng bởi PyMongo. Đại diện này phù hợp với RFC 4122 Mục 4. 1. 2

Ví dụ sau minh họa việc sử dụng biểu diễn này

document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
7

00112233-4455-6677-8899-aabbccddeeff
30 mã hóa các đối tượng
00112233-4455-6677-8899-aabbccddeeff
3 gốc thành các đối tượng loại phụ 3 của
00112233-4455-6677-8899-aabbccddeeff
0, giữ nguyên thứ tự byte giống như
document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
19

document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
8

00112233-4455-6677-8899-aabbccddeeff
33¶

Chú ý

Biểu diễn UUID này nên được sử dụng khi đọc các UUID được ghi vào MongoDB bởi các ứng dụng kế thừa [i. e. các ứng dụng không sử dụng biểu diễn

00112233-4455-6677-8899-aabbccddeeff
29] bằng trình điều khiển Java

Biểu diễn

00112233-4455-6677-8899-aabbccddeeff
33 tương ứng với biểu diễn cũ của UUID được sử dụng bởi Trình điều khiển Java MongoDB

Ghi chú

Biểu diễn

00112233-4455-6677-8899-aabbccddeeff
33 đảo ngược thứ tự của byte 0-7 và byte 8-15

Ví dụ: hãy xem xét cùng một UUID được mô tả trong Xử lý dữ liệu UUID cũ . Giả sử rằng một ứng dụng đã sử dụng trình điều khiển Java mà không có biểu diễn UUID được chỉ định rõ ràng để chèn ví dụ UUID

document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
24 vào MongoDB. Nếu chúng tôi cố gắng đọc giá trị này bằng cách sử dụng
00112233-4455-6677-8899-aabbccddeeff
30, chúng tôi sẽ nhận được một UUID hoàn toàn khác.

document = collection.find[{'uuid': uuid_obj}]
assert document['uuid'] == uuid_obj
9

Tuy nhiên, nếu chúng tôi đặt biểu diễn rõ ràng thành

00112233-4455-6677-8899-aabbccddeeff
33, chúng tôi sẽ nhận được kết quả chính xác

00112233-4455-6677-8899-aabbccddeeff
0

PyMongo sử dụng biểu diễn UUID được chỉ định để sắp xếp lại các byte BSON và tải chúng một cách chính xác.

00112233-4455-6677-8899-aabbccddeeff
24 mã hóa các đối tượng
00112233-4455-6677-8899-aabbccddeeff
3 gốc thành các đối tượng loại phụ 3 của
00112233-4455-6677-8899-aabbccddeeff
0, đồng thời thực hiện sắp xếp lại byte tương tự như bộ mã hóa UUID sang BSON của trình điều khiển C# kế thừa

Chúng tôi có thể giải mã UUID không?

Phiên bản UUID được biểu thị bằng chữ số thứ 13 của chuỗi UUID thập lục phân ["M" trong sơ đồ bên dưới]. Biến thể được thể hiện bằng chữ số thứ 17 ["N" trong sơ đồ bên dưới]. Phiên bản và biến thể được mã hóa trong UUID. Phiên bản dễ giải mã .

Làm cách nào để chuyển đổi UUID thành chuỗi trong Python?

Sử dụng hàm str[] để chuyển UUID thành Chuỗi trong Python . Chúng ta có thể sử dụng chức năng này để chuyển đổi UUID thành Chuỗi trong Python. Trong ví dụ trên, chúng ta tạo một đối tượng uuid bằng hàm uuid1[].

Làm cách nào để chuyển đổi đối tượng UUID thành chuỗi?

Phương thức toString[] của lớp UUID trong Java thường được sử dụng để lấy biểu diễn chuỗi của UUID này . Thông số. Phương thức này không nhận bất kỳ tham số nào. Giá trị trả về. Phương thức này trả về một giá trị Chuỗi là biểu diễn chuỗi của UUID này.

UUID có phải là một hex không?

UUID dưới dạng chuỗi thập lục phân chữ thường gồm 32 ký tự . UUID dưới dạng số nguyên 128 bit.

Chủ Đề