Yêu cầu thg 6 23, 2019 8:52 SA 451 0 1
  • 451 0 1
0

Mã hoá objectId trong mongodb

Chia sẻ
  • 451 0 1

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


Đã trả lời thg 6 23, 2019 5:24 CH
Đã được chấp nhận
+6

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
``
Chia sẻ
Avatar Tuấn Luu @Tuanas
thg 6 24, 2019 7:24 SA

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

thg 6 24, 2019 8:04 SA

@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

Avatar Dũng Nguyễn @nihilism.core
thg 6 24, 2019 9:04 SA

@HuyDQ cảm ơn bạn nhiều nhé, mình hiểu vấn đề rồi !

Avatar Dũng Nguyễn @nihilism.core
thg 6 24, 2019 9:04 SA
Avatar Dũng Nguyễn @nihilism.core
thg 6 24, 2019 9:18 SA

@HuyDQ Mình thấy có package này cũng ổn https://www.npmjs.com/package/shortid

thg 6 24, 2019 12:50 CH

@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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí