在MongoDB中创建简短,唯一的对象ID

Joh*_*ohn 15 mongodb mongoid

我正在使用Rails/Mongoid创建一个类似于instagram的应用程序.我想要一个可以在http://instagr.am/p/DJmU8/等网址中使用的唯一ID

最简单的方法是什么?我可以从Mongo创建的默认BSON ObjectID中获取这样的ID吗?

aav*_*aav 10

您可以尝试使用ObjectID的前4个字节(它们将代表时间戳).

但是,为了100%安全,最好通过实施一个计数器来产生真正独特的短ID.您可以使用单独的集合来维护计数器的当前值.

有关mongo的ObjectID结构的更多详细信息,请访问:http://www.mongodb.org/display/DOCS/Object+IDs

作为替代方案,您可以将转换十六进制字符串id表示转换为基于36个符号(26个拉丁字母+10个数字)的表示.它显然会更短.

看来,有一个ruby库,可以进行这样的转换http://rubyworks.github.com/radix/


ste*_*tef 6

你可以尝试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


use*_*686 5

为什么不使用dylang / shortid

使用npm npmjs.com/package/shortid安装:

npm i shortid
Run Code Online (Sandbox Code Playgroud)

然后要求:

const shortid = require('shortid');
Run Code Online (Sandbox Code Playgroud)

在猫鼬模式中:

npm i shortid
Run Code Online (Sandbox Code Playgroud)

或直接插入:

    users.insert({
        _id: shortid.generate()
        name: ...
        email: ...
        });
Run Code Online (Sandbox Code Playgroud)