MongoDB - ObjectId: Hướng dẫn dành cho người mới bắt đầu

Xin chào các nhà pháp sư cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của MongoDB và идентификатор duy nhất của nó: ObjectId. Đừng lo lắng nếu bạn mới bắt đầu lập trình - tôi sẽ là người hướng dẫn thân thiện của bạn, giải thích mọi thứ từng bước. Vậy, hãy cầm một tách cà phê, và chúng ta cùng bắt đầu!

MongoDB - ObjectId

ObjectId là gì?

Trước khi chúng ta bắt đầu tạo ObjectIds, hãy hiểu chúng là gì. Hãy tưởng tượng bạn đang tổ chức một thư viện khổng lồ. Mỗi cuốn sách cần một mã duy nhất để bạn có thể dễ dàng tìm thấy nó. Đó chính xác là điều mà ObjectId làm cho các tài liệu MongoDB - nó cung cấp cho mỗi tài liệu một идентификатор duy nhất.

Một ObjectId là một giá trị 12 byte, bao gồm:

  • 4 byte thời gian
  • 5 byte giá trị ngẫu nhiên
  • 3 byte bộ đếm tăng dần

Bây giờ, hãy xem chúng ta có thể làm việc với ObjectIds trong MongoDB như thế nào!

Tạo ObjectId mới

Tạo một ObjectId mới đơn giản như làm một sandwich (ít nhất là gần như vậy). MongoDB tự động tạo ra một ObjectId khi bạn chèn một tài liệu mới mà không chỉ định trường _id. Nhưng nếu bạn muốn tự tạo một ObjectId thì sao? Hãy cùng xem!

from bson.objectid import ObjectId

# Tạo một ObjectId mới
new_id = ObjectId()

print(new_id)

Khi bạn chạy đoạn mã này, bạn sẽ thấy điều gì đó như sau:

ObjectId('60d5ecb54f52a1b8c9a8e9d7')

Mỗi lần bạn chạy đoạn mã này, bạn sẽ nhận được một ObjectId khác nhau. Nó giống như mộtflake tuyết - không có haiflake nào hoàn toàn alike!

Hiểu rõ đầu ra

Hãy phân tích những gì chúng ta vừa làm:

  1. Chúng ta đã nhập lớp ObjectId từ mô-đun bson. (BSON là định dạng nhị phân mà MongoDB sử dụng để lưu trữ dữ liệu.)
  2. Chúng ta đã tạo một ObjectId mới bằng cách gọi ObjectId().
  3. Chúng ta đã in ObjectId mới.

Dãy ký tự bạn thấy là đại diện hex của ObjectId 12 byte của chúng ta. Đ Cooler, phải không?

Tạo thời gian của tài liệu

Bây giờ, hãy trở thành một người du lịch thời gian! Chúng ta có thể 추출 thời gian từ một ObjectId để biết tài liệu được tạo khi nào. Điều này rất hữu ích khi bạn muốn theo dõi khi nào dữ liệu được thêm vào cơ sở dữ liệu của bạn.

from bson.objectid import ObjectId
from datetime import datetime

# Tạo một ObjectId mới
new_id = ObjectId()

# Lấy thời gian
timestamp = new_id.generation_time

print(f"Tài liệu này được tạo vào: {timestamp}")

Chạy đoạn mã này có thể cho bạn kết quả như sau:

Tài liệu này được tạo vào: 2023-06-21 15:30:45.000

Điều gì đang xảy ra ở đây?

  1. Chúng ta đã tạo một ObjectId mới, như trước đó.
  2. Chúng ta đã sử dụng thuộc tính generation_time để lấy thời gian.
  3. Chúng ta đã in một thông báo thân thiện với thời gian.

Như vậy, mỗi ObjectId có một máy thời gian nhỏ bên trong, nhớ khi nó được sinh ra!

Chuyển đổi ObjectId thành chuỗi

Đôi khi, bạn có thể cần chuyển đổi ObjectId của bạn thành một chuỗi. Có thể bạn đang gửi dữ liệu đến một trang web, hoặc bạn đang làm việc với một hệ thống không hiểu ObjectIds. Đừng lo lắng - MongoDB đã có bạn!

from bson.objectid import ObjectId

# Tạo một ObjectId mới
new_id = ObjectId()

# Chuyển đổi thành chuỗi
id_string = str(new_id)

print(f"ObjectId: {new_id}")
print(f"Chuỗi: {id_string}")

Điều này sẽ xuất ra điều gì đó như sau:

ObjectId: 60d5ecb54f52a1b8c9a8e9d7
Chuỗi: 60d5ecb54f52a1b8c9a8e9d7

Chúng ta vừa làm gì?

  1. Chúng ta đã tạo một ObjectId mới.
  2. Chúng ta đã chuyển đổi nó thành chuỗi sử dụng hàm str().
  3. Chúng ta đã in cả ObjectId và phiên bản chuỗi.

Lưu ý rằng phiên bản chuỗi trông giống hệt ObjectId, nhưng không có phần ObjectId() bao bọc? Nó giống như cởi bỏ trang phục siêu anh hùng - ở bên trong, nó vẫn là cùng một anh hùng!

Bonus: Làm việc với ObjectIds trong truy vấn MongoDB

Bây giờ chúng ta đã trở thành chuyên gia về ObjectId, hãy xem chúng ta có thể sử dụng chúng trong truy vấn MongoDB như thế nào. Đây là nơi mà phép thuật thực sự xảy ra!

from pymongo import MongoClient
from bson.objectid import ObjectId

# Kết nối đến MongoDB (giả sử nó đang chạy trên localhost)
client = MongoClient('mongodb://localhost:27017/')
db = client['my_database']
collection = db['my_collection']

# Chèn một tài liệu
result = collection.insert_one({'name': 'John Doe', 'age': 30})
inserted_id = result.inserted_id

print(f"Đã chèn tài liệu với ID: {inserted_id}")

# Truy vấn tài liệu sử dụng ObjectId của nó
found_document = collection.find_one({'_id': inserted_id})

print(f"Tài liệu tìm thấy: {found_document}")

Đoạn mã này sẽ xuất ra điều gì đó như sau:

Đã chèn tài liệu với ID: 60d5ecb54f52a1b8c9a8e9d7
Tài liệu tìm thấy: {'_id': ObjectId('60d5ecb54f52a1b8c9a8e9d7'), 'name': 'John Doe', 'age': 30}

Phân tích nó

  1. Chúng ta đã kết nối đến một cơ sở dữ liệu MongoDB và bộ sưu tập.
  2. Chúng ta đã chèn một tài liệu và nhận được ObjectId của nó.
  3. Chúng ta đã sử dụng ObjectId đó để truy vấn cơ sở dữ liệu và tìm tài liệu của chúng ta.

Nó giống như cấp cho ai đó một chìa khóa duy nhất cho tủ của họ - với ObjectId, chúng ta luôn có thể tìm thấy tài liệu của mình trong cơ sở dữ liệu MongoDB khổng lồ!

Kết luận

Và thế là bạn đã có, các bạn! Chúng ta đã cùng nhau hành trình qua thế giới của MongoDB ObjectIds, tạo chúng, 추 xuất thời gian, chuyển đổi chúng thành chuỗi, và thậm chí sử dụng chúng trong truy vấn. Nhớ rằng ObjectIds là bạn đồng hành tin cậy của bạn trong thế giới MongoDB - chúng giúp bạn giữ dữ liệu của mình được tổ chức và dễ dàng truy cập.

Khi bạn tiếp tục hành trình MongoDB của mình, bạn sẽ thấy ObjectIds xuất hiện ở mọi nơi. Nhưng bây giờ, với kiến thức này, bạn có thể xử lý chúng như một chuyên gia!

Tiếp tục thực hành, giữ sự tò mò, và chúc bạn may mắn trong việc lập trình!

Phương thức Mô tả
ObjectId() Tạo một ObjectId mới
ObjectId.generation_time Trả về thời gian khi ObjectId được tạo
str(ObjectId) Chuyển đổi một ObjectId thành chuỗi
collection.insert_one() Chèn một tài liệu vào bộ sưu tập MongoDB và trả về ObjectId
collection.find_one({'_id': ObjectId}) Tìm một tài liệu trong bộ sưu tập MongoDB sử dụng ObjectId

Nhớ rằng, trong thế giới MongoDB, ObjectIds là bạn đồng hành trung thành của bạn. Xử lý chúng tốt, và chúng sẽ phục vụ bạn trung thành trong các cuộc phiêu lưu cơ sở dữ liệu của bạn!

Credits: Image by storyset