将MongoDB Object Id编码为更短的形式

时间:2016-12-05 08:29:31

标签: mongodb encoding

如何将MongoDb的ObjectId的12字节BSON字符串编码为更短的形式。 从24长度线到8或6?

我尝试过base64编码,现在我使用的是ObjectID的普通字符串值

要求

  1. 较短的长度4 - 8个符号
  2. 双向编码
  3. 字符串将用作唯一的短网址。

    ObjectId -> http://bla.com/{encode(ObjectId.toString('ascii'))} -

    反向操作

    http://bla.com/gf8a4as1 -> Model.findById(decode(gf8a4as1)).lean().exec().then((model) => res.json(model)

1 个答案:

答案 0 :(得分:0)

您想将12个字节可逆地打包成4-8个符号吗?除非你使用长度超过1个字节的字符(对于网址来说可能不是最理想的),否则这是不可能的。

您最好的选择是使用base64的变体(例如RFC4648的标准urlsafe变体,-_),它将为您提供16个符号。否则,如果您不需要全局唯一性,请考虑使用较短的ID(例如,序号?)。