我正在使用Rails/Mongoid创建一个类似于instagram的应用程序.我想要一个可以在http://instagr.am/p/DJmU8/等网址中使用的唯一ID
最简单的方法是什么?我可以从Mongo创建的默认BSON ObjectID中获取这样的ID吗?
您可以尝试使用ObjectID的前4个字节(它们将代表时间戳).
但是,为了100%安全,最好通过实施一个计数器来产生真正独特的短ID.您可以使用单独的集合来维护计数器的当前值.
有关mongo的ObjectID结构的更多详细信息,请访问:http://www.mongodb.org/display/DOCS/Object+IDs
作为替代方案,您可以将转换十六进制字符串id表示转换为基于36个符号(26个拉丁字母+10个数字)的表示.它显然会更短.
看来,有一个ruby库,可以进行这样的转换http://rubyworks.github.com/radix/
你可以尝试Mongoid :: Token
https://github.com/thetron/mongoid_token
来自文档:
在您不能或不想使用slug或默认MongoDB ID的情况下,此库是为您的mongoid文档生成唯一的随机令牌的快速而简单的方法.
Mongoid :: Token可以帮助解决这个问题:
http://myawesomewebapp.com/video/4dcfbb3c6a4f1d4c4a000012/edit
进入更像这样的事情:
http://myawesomewebapp.com/video/83xQ3r/edit
为什么不使用dylang / shortid?
使用npm npmjs.com/package/shortid安装:
npm i shortid
然后要求:
const shortid = require('shortid');
在猫鼬模式中:
npm i shortid
或直接插入:
users.insert({ _id: shortid.generate() name: ... email: ... });