在javascript中缩短MongoDB ID

我怎样才能缩短mongodb的ID,以更容易parsingURL中使用的语法。 string在当前的迭代中太长了。

Base64是体面的,但仍然太长。 我正在寻找更多的亚7字符范围内。

我希望能够在node.js和浏览器中进行编码/解码。

从请求parsingObjectId并不困难(所以我不知道为什么这是一个问题?)。 如果目标是制作可键入的url,那么拥有更短的“友好”url将是有价值的。

你不能采取一个12字节的数字,在分片的MongoDB设置中保证是唯一的,并将其压缩到less于12个字节,并保证它是唯一的(例如,你提到了七个字符)。

从文档中 ,MongoDB的ObjectId包括:

  • 一个4字节的时间戳
  • 一个3字节的机器标识符
  • 一个2字节的进程ID
  • 和一个3字节的计数器。

所以,你需要牺牲ObjectId的一部分(因此分片),或者devise一个索引的备用Id创build格式。

虽然你可以对这个ID进行散列,但是可能会出现你想要编码的冲突(再次,你不能把12个字节减less到4个字节并保证唯一性)。 如果有可能的冲突(如果你减less可用的总位数,那么你将会需要某种辅助表)(你需要创build一个从生成的ID到ObjectId的索引) 。

结果选项:

  • 删除通常有意义的位 – 如果你这样做, 不要分割集合
  • devise你自己的独特的ID解决scheme(如果它在一个networking农场,它可能最终看起来非常类似于MongoDB的处理唯一性)
  • 使用ObjectId作为一个很长的数字,并运行一个简短的algorithm(它将需要首先分解成更小的块,因为它超过了JavaScript的53位数字精度),试试这个algorithm,例如= 编码它(将结束17个字符)
  • 使用别的更短,但唯一的身份certificate文件
  • 最简单的:只要接受这个ID很长。 🙂

(目前还不清楚为什么浏览器需要进行这种转换 – 为什么会有文档的ObjectID?)