Làm cách nào để lấy id duy nhất trong MongoDB?
Tôi đang làm việc để tạo hệ thống Quản lý quan hệ khách hàng. Tôi cần tạo một ID duy nhất gồm tám chữ số cho một khách hàng cụ thể. Làm cách nào để đạt được điều đó trong Javascript với Mongodb? Show ghi bàn. 0 Trước hết, bạn cần biết rằng khả năng đụng độ chỉ với 8 số là hơi cao, vì vậy bạn cần cẩn thận với điều đó nếu không muốn trùng id nhưng bạn có thể sử dụng cái này
Tôi khuyên bạn nên sử dụng UUID, nhưng bạn biết nhiều hơn về dự án của mình ghi bàn. 1 Thật khó hoặc không thể trả lời câu hỏi này nếu không có thêm thông tin về các trường hợp sử dụng Nói một cách đơn giản, bạn có thể sử dụng số tăng tự động và điều đó sẽ cung cấp cho bạn một id duy nhất lên tới 99.999.999 Nhưng nếu bạn muốn đi xa hơn, bạn có thể lưu trữ nó dưới dạng cấu trúc 26 bit lên tới 67108863 trong cơ số 10 Từ đó bạn phải xác định ý nghĩa của định danh của bạn Giả sử bạn dự định có 4 máy chủ có thể nhận dạng Bạn có thể đặt 2 bit đầu tiên thành id máy chủ. vì vậy máy chủ 1 sẽ đặt 00 và máy chủ 4 sẽ đặt 11 Điều này để lại cho bạn 24 bit để xác định Vì vậy, bây giờ bạn có thể muốn thiết lập một số chi tiết. Giống như đặt năm ở định dạng YY vì bạn có thể không mong đợi ứng dụng này tồn tại qua năm 2100 6 bit sẽ cho phép chúng tôi tạo một số lên tới 64 để chúng tôi có thể sử dụng thêm một bit để đếm tới 128 Vậy năm 2020 sẽ là "001 0100" Chúng tôi chỉ có 12 tháng một năm nên nó phù hợp với 4 bit Tháng mười là tháng thứ mười nên số 9 hoặc "1001" trong hệ nhị phân Chúng tôi có tối đa 31 ngày mỗi tháng nên 5 bit sẽ đủ tốt Hôm nay là ngày 15 của tháng nên số 14 trong hệ nhị phân là "01110" Cho đến nay, chúng tôi đã sử dụng 18 bit để tạo 1 id mỗi ngày và điều đó khiến chúng tôi có thêm 8 bit
Với 9 bit còn lại, bạn có thể tạo tối đa 256 id mỗi ngày trên 4 máy chủ khác nhau mà không gặp rủi ro khi tạo xung đột Vì vậy, nếu bạn sử dụng số lượng id tối đa, mỗi ngày bạn có thể tạo tối đa 1024 id mỗi ngày. Nó không nhiều nhưng nó có thể đủ tốt tùy theo nhu cầu Sử dụng phương pháp đó, id đầu tiên trên máy chủ 0 cho ngày hôm nay có thể trông như thế này
Hoặc trong cơ sở 10. "0539 7505" Vì vậy, nếu không biết các yêu cầu của bạn, thì không thể tìm ra một mã định danh tốt hơn có ý nghĩa nào đó. Rõ ràng là các phương pháp dựa trên thời gian làm giảm đáng kể số lượng bit có thể được sử dụng. Bởi vì những ngày trong quá khứ là những id không thể được sử dụng và thật không may với 4 bit dữ liệu cho các tháng, các số 13,14,15 không bao giờ được sử dụng và không có ý nghĩa và chỉ đơn giản là danh sách mãi mãi Trong trường hợp của năm, chúng tôi thậm chí có thể tiết kiệm một chút và nói rằng thay vì 7 bit, chúng tôi sẽ sử dụng 6 bit cho đến 64 và số chỉ là Thay vì sử dụng ngày tháng, bạn có thể sử dụng bất kỳ thứ gì có ý nghĩa để tạo mã định danh duy nhất. Nếu bạn sử dụng các số ngẫu nhiên, không những id không có ý nghĩa mà còn có nguy cơ tạo xung đột Cuối cùng, tại sao không sử dụng đơn giản là sử dụng một ObjectId được tạo bởi mongodb? Trong MongoDB, khá dễ dàng và hiệu quả để tương tác với các tài liệu bằng cách sử dụng các ID duy nhất. Phương thức find() của MongoDB chứa một danh sách mở rộng các toán tử và lệnh được hỗ trợ giúp truy xuất tài liệu ở dạng tinh chỉnh. ID duy nhất có thể được sử dụng với phương thức find() để lấy tài liệu dựa trên ID của chúng. Bằng cách làm theo hướng dẫn này, người dùng Mongo có thể lấy tài liệu bằng cách sử dụng id của những tài liệu đó trong phương thức find(). Ngoài ra, để hiểu rõ hơn, một vài ví dụ được cung cấp cho thấy cách sử dụng phương thức “find() by id” trong MongoDB MongoDB là một cơ sở dữ liệu NoSQL hoạt động với các bộ sưu tập và tài liệu. Mỗi tài liệu được tạo trên MongoDB có một thuộc tính ID đối tượng duy nhất. Vì vậy, khi tạo tài liệu mà không cần nhập ID, tài liệu sẽ được tạo bằng ID được tạo tự động Ai tạo ID? Khi điền thuộc tính của tài liệu, chúng ta không nhất thiết phải nhập ID đối tượng. Nhưng khi chúng ta tham khảo MongoDB sau khi tạo một tài liệu, nó sẽ có ID đối tượng giống như thế này { Điều này giúp chúng tôi tạo tài liệu trong MongoDB dễ dàng hơn nhiều và tiết kiệm rất nhiều thời gian. ID đối tượng trong các tài liệu trong MongoDB được tạo bởi trình điều khiển MongoDB, nói chuyện với MongoDB. Vì vậy, điều này mang lại rất nhiều lợi thế
Thuộc tính của ID đối tượng ID đối tượng dài 24 ký tự với hai ký tự chiếm tối đa một byte, do đó chứa tổng cộng 12 byte. Đây là những gì 12 byte của ID đối tượng cho chúng ta biết dấu thời gianBốn byte đầu tiên của ID đối tượng biểu thị dấu thời gian khi tài liệu được tạo. Chúng tôi tránh phải tạo một thuộc tính riêng trong tài liệu, chẳng hạn như Do sự đóng góp của dấu thời gian cho ID đối tượng, chúng tôi có thể có được thời gian khi tài liệu được tạo bằng cách chỉ tham khảo ID. Do đó, khi truy vấn dữ liệu, chúng tôi không cần một phương pháp khác để sắp xếp tài liệu theo dấu thời gian Bạn có thể lấy dấu thời gian của một đối tượng bằng cách sử dụng các lệnh sau const mongoose = require('mongoose');// Create object Id on memory mã định danh máyBa byte tiếp theo đại diện cho mã định danh máy (i. e. máy mà tài liệu được tạo trên đó). Giả sử hai tài liệu được tạo cùng lúc trên các máy khác nhau. Ba byte này sẽ khác nhau, làm tăng thêm tính duy nhất của ID đối tượng định danh quy trìnhHai byte tiếp theo đại diện cho định danh quy trình (i. e. quy trình trong máy mà tài liệu được tạo trên đó). Giả sử hai tài liệu được tạo cùng lúc trên cùng một máy nhưng với các quy trình khác nhau. Hai byte này sẽ khác nhau, làm tăng thêm tính duy nhất của ID đối tượng Phản đốiBa byte cuối cùng đại diện cho một bộ đếm. Bộ đếm này là một số tăng tự động tương tự như các biến bộ đếm khác trong cơ sở dữ liệu SQL và NoSQL, làm cho ID đối tượng trở thành duy nhất (trong SQL, điều này có thể cản trở khả năng mở rộng). Giả sử hai tài liệu được tạo cùng lúc trên cùng một máy và trên cùng một quy trình. Các byte bộ đếm sẽ khác nhau, góp phần tạo nên tính duy nhất của ID đối tượng Vấn đề ID đối tượng Trong MongoDB, một vấn đề phát sinh với bộ đếm trong ID đối tượng có thể hạn chế tính duy nhất của nó ID đối tượng chỉ là duy nhất miễn là bộ đếm không tràn Sự cố tràn bộ đếm xảy ra khi bộ đếm đã đạt đến công suất tối đa, dẫn đến các tài liệu có cùng ID đối tượng. Do đó, ID đối tượng gần như là duy nhất nhưng không phải là duy nhất 100% Đây là lý do tại sao. Bộ đếm đang được phân bổ ba byte. Điều này có nghĩa là nó có khả năng đại diện cho tới 16 triệu số. Nếu nhiều tài liệu đó được tạo cùng lúc, trên cùng một máy và cùng một quy trình, thì hai tài liệu có thể chia sẻ cùng một ID đối tượng Sử dụng Mongoose Khi xây dựng ứng dụng bằng Node. js và Express. js, chúng tôi sử dụng cầy mangut. Mongoose là một sự trừu tượng hóa trên trình điều khiển MongoDB. Do đó, khi tạo tài liệu, cầy mangut sẽ nói chuyện với trình điều khiển MongoDB để tạo ID đối tượng mới Tạo ID đối tượng// create an object id on memory - Not on DB!const mongoose = require('mongoose');const id = mongoose.Types.ObjectId(); Xác thực ID đối tượngVới cầy mangut, bạn cũng có thể xác thực tĩnh ID đối tượng bằng cách sử dụng thuộc tính Phần kết luận ID đối tượng MongoDB là duy nhất trừ khi đạt đến một kịch bản nhất định (đã thảo luận ở trên). Do đó, với tư cách là nhà phát triển phần mềm, chúng ta nên xem xét quy mô và độ phức tạp của hệ thống để đánh đổi giữa ID được tạo tự động và ID đối tượng tùy chỉnh Cách tiếp cận hoàn toàn do bạn quyết định. Để biết thêm thông tin về ID đối tượng MongoDB, bạn có thể tham khảo tài liệu chính thức của MongoDB và Mongoose Tôi hy vọng câu chuyện này đã giáo dục bạn về tính duy nhất và độ tin cậy của ID đối tượng trong MongoDB. Hãy vui vẻ học tập và tận hưởng mã hóa Làm cách nào để nhận các giá trị duy nhất trong MongoDB?Trong MongoDB, phương thức differ() tìm các giá trị riêng biệt cho một trường nhất định trong một tập hợp và trả về kết quả trong một mảng. Phải mất ba tham số đầu tiên là trường trả về các giá trị riêng biệt và các tham số khác là tùy chọn.
Làm cách nào để tìm id trong MongoDB?MongoDB cung cấp một hàm có tên findById() được sử dụng để truy xuất tài liệu khớp với 'id' do người dùng chỉ định. Để sử dụng findById trong MongoDB, hàm find() được sử dụng. Nếu không tìm thấy tài liệu nào khớp với 'id' đã chỉ định, nó sẽ trả về giá trị rỗng.
MongoDB IDS độc đáo như thế nào?Theo hướng dẫn của MongoDB, câu trả lời là có, theo mặc định, nó là duy nhất . MongoDB tạo chỉ mục _id, là chỉ mục duy nhất tăng dần trên trường _id, cho tất cả các bộ sưu tập khi bộ sưu tập được tạo. Bạn không thể xóa chỉ mục trên trường _id.
Làm cách nào để tạo _id trong MongoDB?Tạo một ObjectId mới. Để tạo ID đối tượng mới theo cách thủ công trong MongoDB, bạn có thể khai báo ObjectId dưới dạng phương thức . Trong hình ảnh bên dưới, bạn có thể quan sát thấy rằng chúng ta đang khai báo một biến có phương thức ObjectId làm giá trị. Nó sẽ trả về một hệ thập lục phân duy nhất mà chúng ta có thể lưu trữ trong một biến có tên myObjectId. |