首页 > 解决方案 > 如何创建 10 个字符长度的 Mongo ObjectId(如 Parse Server)

问题描述

我很好奇如何创建 Parse Server 用于其记录存储的 10 个字符长度的 Mongodb objectIds,即 (XlatDx2nYf)。

我特别问是因为试图将 Parse 整体转换为更加面向服务的方法,在这种情况下是基于 Java 的,并且无法弄清楚如何使用这些看似“格式错误”的 objectIds 创建对象。但是这个问题比 Java / Mongodb 接口更通用。我实际上不知道 Parse Server 是如何摆脱使用这些不符合 Mongodb ObjetId标准的自定义 objectIds 创建记录的。这里的解释会很棒。

从那里我觉得我可能可以在 Java (Morphia) 世界中弄清楚。谢谢你们的投入!

标签: javamongodbindexingmorphiaobjectid

解决方案


在我看来,这些 Parse ID 只是Base62 编码的整数。我发现这个片段可以将任何格式格式化int为这种格式。

不幸的是,即使是 Javalong也只有 8 个字节,因此您无法一次性获取 ObjectId,但类似以下内容应该可以工作:

ObjectId myId = new ObjectId()
String base62 = Base62.fromBase10(myId.getTimestamp()) + 
   Base62.fromBase10(myId.getMachineIdentifier()) + 
   Base62.fromBase10(myId.getProcessIdentifier()) +
   Base62.fromBase10(myId.getCounter());

推荐阅读