Tại sao mongodb id là objectid?

Trong 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 một giá trị ObjectID duy nhất

Mặc định khi chèn tài liệu vào trong collection 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 Object id như hình bên dưới

Tại sao mongodb id là objectid?

Khi bạn truy vấn tài liệu trong bộ sưu tập, bạn có thể xem 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 chính 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 với _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"})

Giải thích mã

  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 find để hiển thị các tài liệu trong bộ sưu tập, Kết quả sau sẽ được hiển thị

đầu ra

Tại sao mongodb id là objectid?

Kết quả hiển thị rõ ràng rằng trường _id mà chúng tôi đã xác định 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

(Các) ObjectId được tạo tự động bởi Trình điều khiển MongoDB, không phải cơ sở dữ liệu MongoDB. Nó được sử dụng để xác định duy nhất một tài liệu trong cơ sở dữ liệu

Khi chúng tôi xây dựng một ứng dụng với NodeJS và Express, chúng tôi sử dụng Mongoose, một bản tóm tắt trên MongoDB Driver. Mongoose trao đổi với MongoDB Driver để tạo một ObjectId mới

1. Cấu trúc của ObjectId

'_id': '5q6ffe6a0ba62570agcedd68'

objectid

Cấu trúc của ObjectId [Nguồn. https. //Blog. eduonix. com/]

Mỗi ObjectId bao gồm 24 ký tự. Hơn nữa, cứ sau 2 ký tự đại diện cho một byte. Vì vậy, nó bao gồm tổng cộng 12 byte. Từ trái sang phải

  • 4 byte. Dấu thời gian
  • 3 byte. mã định danh máy
  • 2 byte. định danh quy trình
  • 3 byte. Phản đối

Chúng ta sẽ thảo luận chi tiết về tất cả những thứ này (12 byte), ở phần sau của bài viết này

💡 Trước đó, chúng ta cần biết ObjectId này được tạo khi nào?

…Có một sự nhầm lẫn rằng (các) ObjectId được tạo ra khi chúng ta lưu tài liệu vào cơ sở dữ liệu MongoDB bằng cách sử dụng phương thức save() của Mongoose. Nếu bạn nghĩ giống nhau, bạn có thông tin sai

Câu trả lời. ObjectId được tạo khi chúng ta khởi tạo một tài liệu mới bằng lớp mô hình Mongoose

Giả sử một mô hình cầy mangut có tên là Course và chúng tôi muốn tạo một tài liệu 'khóa học' mới cho mô hình này

const course = new Course({
name : 'Future of APIs',
tutor: 'Jane Doe',
});
await course.save();

Thời điểm chúng tôi khởi tạo tài liệu bằng từ khóa mới, Trình điều khiển MongoDB sẽ tạo objectId cho tài liệu cụ thể đó

Ghi chú. Đó là một cách tốt để tránh đặt lại biến tài liệu, nghĩa là 'khóa học' trong ví dụ của chúng tôi, trong khi lưu nó vào cơ sở dữ liệu. Chúng tôi thường đặt lại và khởi tạo lại biến này để trả lại cho khách hàng

1. 1 dấu thời gian

'_id': '5q6ffe6a0ba62570agcedd68'

8 ký tự đầu tiên, nghĩa là 4 byte đại diện cho dấu thời gian tạo tài liệu

Chúng tôi có thể trích xuất dấu thời gian này từ ObjectId. Làm sao?

const timestamp = _id.getTimestamp();

Vì vậy, chúng ta không cần tạo một thuộc tính riêng trong cơ sở dữ liệu, như createdAt, để đặt trước khi đối tượng được tạo

1. 2 Mã định danh máy

'_id': '5q6ffe6a0ba62570agcedd68'

3 byte tiếp theo đại diện cho một mã định danh máy

Hai máy khác nhau sẽ có số nhận dạng khác nhau. Không có gì nhiều để nói về điều này

1. 3 Định danh quy trình

________số 8

2 byte tiếp theo được dành riêng để xác định quá trình. Nếu chúng ta tạo hai ObjectId trên cùng một máy nhưng trong các quy trình khác nhau, thì 2 byte này sẽ khác nhau

1. 4 quầy

'_id': '5q6ffe6a0ba62570agcedd68'

Cuối cùng, 3 byte cuối cùng đại diện cho bộ đếm gia tăng. Nếu chúng ta tạo hai ObjectId có cùng 18 ký tự đầu tiên hoặc cùng thông số kỹ thuật đã nêu ở trên, thì ba byte cuối cùng sẽ khác

Nó tương đương với thuộc tính cột tăng tự động trong cơ sở dữ liệu SQL

2. Tạo rõ ràng một ObjectId______3

Chúng ta có thể tạo một ObjectId một cách rõ ràng bằng cách sử dụng lớp ObjectId của cầy mangut. Lớp này có một vài phương thức tĩnh khác, chẳng hạn như

  • lấy Dấu thời gian()
  • isValid()

Chúng ta đã thảo luận về phương thức getTimestamp() ở trên trong phần 1. 1

Phương thức isValid() được sử dụng để xác minh xem một ObjectId có được chấp nhận hay không. Chúng tôi có thể sử dụng phương pháp này khi chúng tôi nhận được ID từ người dùng để xóa hoặc cập nhật tài liệu

if( ! mongoose.Types.ObjectId.isValid( req.body.courseID ) )
return res.status(400);

Đó là một cách thực hành tốt để sử dụng phương thức isValid() với các thao tác CRUD cầy mangut sau đây. findById(), findByIdAndUpdate, findByIdAndDelete() và findByIdAndRemove()

3. Những điều lý thú

💡 “Giá trị của _id là duy nhất trên tất cả các cơ sở dữ liệu MongoDB trên thế giới. ”

Tuyên bố trên có đúng không?

Có thể có nhiều ObjectId giống hệt nhau. Nhưng nó rất hiếm

Làm sao?

MongoDB ID là loại gì?

MongoDB cung cấp mã định danh duy nhất tự động cho trường _id ở dạng Kiểu dữ liệu ObjectId . Đối với những người đã quen thuộc với Tài liệu MongoDB, có thể bạn đã bắt gặp kiểu dữ liệu ObjectId trong trường _id.

ID đối tượng MongoDB được tạo như thế nào?

Chỉ định Chuỗi số nguyên . Bốn byte đầu tiên của ObjectId là số giây kể từ kỷ nguyên Unix. Trong ví dụ này, 32 giây, được biểu thị bằng hệ thập lục phân là 00000020 , được thêm vào. Phần tử ngẫu nhiên năm byte và bộ đếm ba byte tạo nên phần còn lại của ObjectId. Generate a new ObjectId using an integer. The first four bytes of the ObjectId are the number of seconds since the Unix epoch . In this example 32 seconds, represented in hexadecimal as 00000020 , are added. A five byte random element and a three byte counter make up the rest of the ObjectId.

MongoDB ObjectId có phải là UUID không?

Theo mặc định, trình điều khiển Java MongoDB tạo ID thuộc loại ObjectId. Đôi khi, chúng tôi có thể muốn sử dụng một loại dữ liệu khác làm mã định danh duy nhất của một đối tượng, chẳng hạn như UUID. Tuy nhiên, trình điều khiển Java MongoDB không thể tự động tạo UUID .

ObjectId nghĩa là gì?

Số nhận dạng đối tượng (OID) là tên dài hạn, rõ ràng cho bất kỳ loại đối tượng hoặc thực thể nào . Cơ chế OID tìm thấy ứng dụng trong nhiều tình huống khác nhau, đặc biệt là về bảo mật và được Liên minh Viễn thông Quốc tế (ITU), Lực lượng Đặc nhiệm Kỹ thuật Internet (IETF) và ISO xác nhận.