Mã hoá objectId trong mongodb
Xin chào mọi người, mình là newbie. Khi mình xử lý link friendly dạng link-bai-viet-objectId, trong đó objectId
lấy từ mongodb ra, mình không nghĩ đó là cách mà mọi người hay làm, giờ mình muốn mã hoá cái objectId
cũng như giải mã được, để khi tạo URL friendly thì không truyền thẳng nó ra, có cách nào không mọi người nhỉ ? Cảm ơn vì đã dành tgian xem bài của mình.
1 CÂU TRẢ LỜI
Theo mình bạn không nhất thiết phải mã hóa cái objectId
đó mà thay và đó bạn có thể tạo thêm một cột mới trong database gọi là hashId
. Với cách làm nay bạn sẽ đạt được mục đích mình mong muốn và thay vì mất công mã hóa hay giải mã bạn chỉ cần đổi:
link-bai-viet-objectId
=>link-bai-viet-hashId
Về cách tạo hashId
thì có rất nhiều cách bạn có thể làm miễn sao cho hashId
sinh ra là unique không khi bạn query từ database sẽ bị trùng, ví dụ bạn có thể lấy tiêu đề bài viết đem đi dùng với hàm băm như md5()
, sha
, ... và cắt lấy n kí tự đầu. Trong trường hợp tiêu đề bài viết giống nhau thì bạn có thể sử dụng thời gian tạo bài và áp dụng phương pháp tương tự. Ví dụ với PHP:
<?php
$title = 'Mã hóa objectId trong mongodb';
$hash_title = md5($title); // 03a9f61292bc28aeadce9b9ebd464359
$hash_id = substr($hash_title, 0, 7) // Lấy 7 kí tự đâu => 03a9f61
``
substr ngắn quá sợ k unique mất còn để dài quá thì index k biết có khoai không ? where mệt hơn objectID của mongo rất nhiều lần
@Tuanas như trên viblo bạn tháy cái phần hashId
nó sẽ là 11 kí tự và bạn hoàn toàn có thể lấy 11 kí tự. Còn vấn đẻ uqnie như mình nói thì bạn có thể kết hợp đem hash tiêu đề bài viết + thời gian tạo
@HuyDQ cảm ơn bạn nhiều nhé, mình hiểu vấn đề rồi !
@HuyDQ Mình thấy có package này cũng ổn https://www.npmjs.com/package/shortid
@nihilism.core nói chung cái hashId nó cũng là chỉ một chuỗi kí tự thôi nên bạn có thể sinh nó bằng bất cứ cách nào như code tay hoặc dùng package miễn sao nó đảm bảo tính unique