Mongodb Primary Key: Ví dụ để thiết lập trường _id với ObjectId()

⚡ Tóm tắt thông minh

MongoDB Khóa chính là trường _id dùng để xác định duy nhất mỗi tài liệu trong một bộ sưu tập. Theo mặc định, nó chứa một ObjectId được tạo tự động, nhưng bạn cũng có thể gán giá trị riêng của mình cho trường _id khi chèn tài liệu.

  • 🔑 Vai trò chủ chốt: Trường _id là khóa chính dùng để xác định duy nhất mỗi tài liệu trong một tập tin. MongoDB bộ sưu tập.
  • 🆔 ObjectId mặc định: Nếu bạn bỏ qua _id, MongoDB Tự động thêm một giá trị ObjectId duy nhất gồm 12 byte vào tài liệu.
  • 🇧🇷 Theo thứ tự thời gian: Một ObjectId bắt đầu bằng dấu thời gian 4 byte, vì vậy các ID có thể được sắp xếp gần đúng theo thời gian tạo.
  • 🇧🇷 Phím tùy chỉnh: Bạn có thể cung cấp giá trị _id của riêng mình, chẳng hạn như một số hoặc chuỗi ký tự, khi chèn tài liệu.
  • 🔒 Bất biến: Sau khi đã thiết lập, giá trị _id không thể thay đổi; bạn phải xóa và chèn lại để sửa đổi nó.

Khóa chính trong là gì MongoDB?

In MongoDB, trường _id làm khóa chính cho bộ sưu tập để mỗi tài liệu có thể được xác định duy nhất trong bộ sưu tập. Trường _id chứa giá trị ObjectID duy nhất.

Theo mặc định khi chèn tài liệu vào bộ sưu tập, nếu bạn không thêm tên trường có _id vào tên trường thì MongoDB sẽ tự động thêm trường ID đối tượng như hiển thị bên dưới

Khóa chính trong MongoDB

Khi bạn truy vấn các tài liệu trong bộ sưu tập, bạn có thể thấy ObjectId cho từng tài liệu trong bộ sưu tập.

Nếu bạn muốn đảm bảo rằng MongoDB không tạo Trường _id khi bộ sưu tập được tạo và nếu bạn muốn chỉ định id của riêng mình làm _id của bộ sưu tập thì bạn cần xác định rõ ràng điều này trong khi tạo bộ sưu tập.

Khi tạo một trường id một cách rõ ràng, nó cần được tạo bằng _id trong tên của nó.

Hãy xem một ví dụ về cách chúng ta có thể đạt được điều này.

db.Employee.insert({_id:10, "EmployeeName" : "Smith"})

Code Giải thích:

  1. Chúng tôi giả định rằng chúng tôi đang tạo tài liệu đầu tiên trong bộ sưu tập và do đó trong câu lệnh trên khi tạo bộ sưu tập, chúng tôi xác định rõ ràng trường _id và xác định giá trị cho nó.

Nếu lệnh được thực hiện thành công và bây giờ sử dụng lệnh tìm kiếm để hiển thị các tài liệu trong bộ sưu tập, Đầu ra sau sẽ được hiển thị

Đầu ra:

Khóa chính trong MongoDB

Đầu ra hiển thị rõ ràng rằng trường _id mà chúng tôi đã xác định trong khi tạo bộ sưu tập hiện được sử dụng làm khóa chính cho bộ sưu tập.

ObjectId là gì? MongoDB?

ObjectId là kiểu giá trị mặc định. MongoDB Giá trị này được gán cho khóa chính _id. Đây là một mã định danh 12 byte được thiết kế để duy nhất trên toàn cầu giữa các máy chủ và bộ sưu tập, do đó hầu như không bao giờ có hai tài liệu nhận được cùng một giá trị. Vì trình điều khiển máy khách có thể tạo ObjectId mà không cần hỏi máy chủ, MongoDB Có thể chèn tài liệu nhanh chóng và mở rộng quy mô trên nhiều máy mà không cần bộ đếm trung tâm.

Mỗi ObjectId được lưu trữ dưới dạng nhị phân nhỏ gọn nhưng được hiển thị dưới dạng chuỗi thập lục phân 24 ký tự, ví dụ: ObjectId(“507f1f77bcf86cd799439011”). Các byte đầu tiên dựa trên thời gian hiện tại, có nghĩa là các giá trị tăng dần khi tài liệu được tạo. Điều này làm cho ObjectId không chỉ duy nhất mà còn có thể sắp xếp gần đúng theo thứ tự chèn, một thuộc tính hữu ích khi bạn muốn hiển thị các bản ghi mới nhất hoặc cũ nhất trước.

Cấu trúc của một MongoDB ID đối tượng

A MongoDB ObjectId có độ dài chính xác 12 byte, và mỗi phần đều có ý nghĩa cụ thể. Hiểu cấu trúc này giúp giải thích tại sao ObjectId lại duy nhất và được sắp xếp theo thứ tự thời gian:

  • Dấu thời gian 4 byte: Số giây kể từ thời điểm bắt đầu kỷ nguyên Unix, ghi lại thời điểm ObjectId được tạo. Điều này giúp sắp xếp các ID theo thời gian.
  • Giá trị ngẫu nhiên 5 byte: Một giá trị được tạo ra một lần cho mỗi quy trình, kết hợp định danh của máy và quy trình, do đó các máy khách khác nhau sẽ tạo ra các ID khác nhau.
  • Bộ đếm tăng dần 3 byte: Một bộ đếm bắt đầu từ một giá trị ngẫu nhiên và tăng lên với mỗi ObjectId mới được thêm vào trong cùng một giây, giúp ngăn ngừa xung đột trong quá trình chèn dữ liệu nhanh.

Cả ba thành phần này cùng nhau đảm bảo rằng mỗi ObjectId đều là duy nhất, ngay cả khi nhiều tài liệu được chèn cùng một lúc trên các máy chủ khác nhau. Bạn có thể đọc thời gian tạo được nhúng bất cứ lúc nào bằng cách gọi phương thức getTimestamp() trên một ObjectId.

Ưu điểm của việc sử dụng ObjectId làm khóa chính

Việc sử dụng ObjectId mặc định làm khóa chính _id mang lại một số lợi ích thiết thực, đó là lý do tại sao hầu hết các trường hợp đều như vậy. MongoDB Các bộ sưu tập phụ thuộc vào điều đó:

  • Tạo tự động: Bạn không cần tự tạo hoặc quản lý các giá trị khóa, giảm thiểu nguy cơ trùng lặp khóa.
  • Tính độc đáo toàn cầu: ObjectId duy nhất trên tất cả các máy chủ, vì vậy chúng hoạt động tốt trong các triển khai phân tán và chia sẻ dữ liệu.
  • Dấu thời gian tích hợp sẵn: Thời gian tạo tài liệu được nhúng cho phép bạn sắp xếp hoặc lọc tài liệu theo thời gian mà không cần thêm trường ngày tháng.
  • Hiệu suất cao: Việc tạo mã phía máy khách giúp tránh việc phải gửi yêu cầu khứ hồi đến máy chủ, giữ cho...ping Chèn nhanh.

Mặc dù ObjectId phù hợp với hầu hết các ứng dụng, bạn vẫn có thể chọn một _id tùy chỉnh, chẳng hạn như địa chỉ email hoặc mã sản phẩm, khi một khóa nghiệp vụ tự nhiên giúp việc truy vấn đơn giản hơn. Lựa chọn đúng đắn phụ thuộc vào cách bạn dự định tra cứu và liên kết dữ liệu của mình.

Câu Hỏi Thường Gặp

Không. Trường _id không thể thay đổi sau khi tài liệu được tạo. Để thay đổi nó, bạn phải xóa tài liệu hiện có và chèn một tài liệu mới với giá trị _id mong muốn.

Trường _id chấp nhận hầu hết các kiểu dữ liệu BSON, bao gồm ObjectId, số nguyên, chuỗi và thậm chí cả tài liệu nhúng. Quy tắc duy nhất là giá trị phải là duy nhất trong tập hợp và không được là mảng.

Vâng. MongoDB Công cụ này tự động tạo chỉ mục duy nhất trên trường _id cho mỗi bộ sưu tập. Chỉ mục này không thể bị xóa và giúp việc tìm kiếm theo khóa chính diễn ra rất nhanh.

Trí tuệ nhân tạo có thể giải thích dấu thời gian của ObjectId, tạo mã để giải thíchtract thời gian tạo bằng getTimestamp() và chuyển đổi ObjectIds thành chuỗi, giúpping Các nhà phát triển gỡ lỗi và hiểu các mã định danh tài liệu nhanh hơn.

Đúng vậy. AI có thể tư vấn xem nên giữ nguyên ObjectId mặc định hay sử dụng _id tùy chỉnh như email hoặc UUID, dựa trên các mẫu truy vấn, nhu cầu về tính duy nhất và kế hoạch phân mảnh dữ liệu của bạn.

Tóm tắt bài viết này với: