Phân tích cú pháp ObjectId từ một yêu cầu sẽ không khó (vì vậy tôi không chắc tại sao đó lại là vấn đề?). Nếu mục tiêu là tạo ra các URL có thể đánh máy, thì việc có một URL ngắn hơn và "thân thiện hơn" sẽ có giá trị.
Bạn không thể lấy một số 12 byte được đảm bảo là duy nhất trong thiết lập MongoDB được phân nhỏ và cô đọng nó thành ít hơn 12 byte và đảm bảo nó là duy nhất (ví dụ như bạn đã đề cập dưới bảy ký tự).
Từ tài liệu , MongoDB ObjectId bao gồm:
- dấu thời gian 4 byte
- mã định danh máy 3 byte
- id quy trình 2 byte
- và một bộ đếm 3 byte.
Vì vậy, bạn sẽ cần phải hy sinh một số phần của ObjectId (và do đó là sharding) hoặc tạo ra một định dạng tạo Id thay thế được lập chỉ mục.
Mặc dù bạn có thể băm ID nhưng một lần nữa, xung đột có thể phát sinh mà bạn muốn viết mã (một lần nữa, bạn không thể lấy 12 byte xuống 4 byte và đảm bảo tính duy nhất). Và nếu có thể xảy ra xung đột (và sẽ có nếu bạn giảm tổng số bit có sẵn), dù sao thì bạn cũng sẽ cần một số loại bảng phụ (và bạn cần tạo chỉ mục để chuyển từ ID đã tạo sang ObjectId) .
Tùy chọn kết quả:
- Loại bỏ các bit quan trọng thông thường - nếu bạn làm điều này, không chia nhỏ bộ sưu tập
- Phát triển giải pháp ID duy nhất của riêng bạn (và nếu nó nằm trong trang trại web, nó có thể trông rất giống với MongoDB để xử lý tính duy nhất)
- sử dụng ObjectId dưới dạng một số dài và chạy thuật toán rút gọn trên nó (trước tiên nó sẽ cần được chia nhỏ thành các phần nhỏ hơn vì nó vượt quá độ chính xác số của JavaScript là 53 bit), hãy thử thuật toán này chẳng hạn = mã hóa nó (sẽ có khoảng 17 ký tự)
- sử dụng thứ gì đó khác ngắn hơn, nhưng duy nhất làm Id cho tài liệu của bạn
- Dễ nhất:Chỉ cần chấp nhận rằng các Id dài. :)
(Không rõ tại sao trình duyệt cần thực hiện chuyển đổi này - tại sao trình duyệt lại có ObjectID của tài liệu?)