Asked Jun 23rd, 2019 8:52 AM 173 0 1
  • 173 0 1
0

Mã hoá objectId trong mongodb

Share
  • 173 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 ANSWERS


Answered Jun 23rd, 2019 5:24 PM
Accepted
+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
``
Share
Tuấn Luu @Tuanas
Jun 24th, 2019 7:24 AM

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

0
| Reply
Share
Jun 24th, 2019 8:04 AM

@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

0
| Reply
Share
Dũng Nguyễn @nihilism.core
Jun 24th, 2019 9:04 AM

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

0
| Reply
Share
Dũng Nguyễn @nihilism.core
Jun 24th, 2019 9:04 AM
Dũng Nguyễn @nihilism.core
Jun 24th, 2019 9:18 AM

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

0
| Reply
Share
Jun 24th, 2019 12:50 PM

@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

0
| Reply
Share