gpt4 book ai didi

javascript - 在javascript中缩短MongoDB ID

转载 作者:可可西里 更新时间:2023-11-01 10:05:17 28 4
gpt4 key购买 nike

如何将 mongodb ID 缩短为更易于解析的语法以用于 URL。该字符串在当前迭代中太长。

Base64 不错,但还是太长了。我正在寻找 7 个以下字符范围内的更多信息。

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

最佳答案

从请求中解析 ObjectId 并不困难(所以我不确定为什么这是个问题?)。如果目标是制作可键入的 URL,那么拥有一个更短且“更友好”的 URL 将很有值(value)。

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

来自docs , MongoDB ObjectId 包括:

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

因此,您要么需要牺牲部分 ObjectId(并因此进行分片),要么设计一种可索引的替代 Id 创建格式。

虽然您可以潜在地对 ID 进行哈希处理,但还是会出现您想要为其编码的冲突(同样,您不能将 12 字节减少到 4 字节并保证唯一性)。如果可能存在冲突(如果您减少可用的总位数,就会有冲突),无论如何您都需要某种辅助表(并且您需要创建一个索引以从生成的 ID 转到 ObjectId) .

结果选项:

  • 移除通常重要的位——如果您这样做,不要对集合进行分片
  • 设计您自己的唯一 ID 解决方案(如果它在网络场中,它最终可能看起来与 MongoDB 处理唯一性的方式非常相似)
  • 将 ObjectId 用作长数字并对其运行缩短算法(需要首先将其分解为更小的 block ,因为它超过了 JavaScript 的 53 位数字精度),例如尝试使用此算法 = encode它(将结束大约 17 个字符)
  • 使用其他更短但唯一的内容作为您的文档的 Id
  • 最简单:接受 ID 很长这一事实。 :)

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

关于javascript - 在javascript中缩短MongoDB ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14306931/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com