java - 如何创建 10 个字符长度的 Mongo ObjectId(如 Parse Server)
问题描述
我很好奇如何创建 Parse Server 用于其记录存储的 10 个字符长度的 Mongodb objectIds,即 (XlatDx2nYf)。
我特别问是因为试图将 Parse 整体转换为更加面向服务的方法,在这种情况下是基于 Java 的,并且无法弄清楚如何使用这些看似“格式错误”的 objectIds 创建对象。但是这个问题比 Java / Mongodb 接口更通用。我实际上不知道 Parse Server 是如何摆脱使用这些不符合 Mongodb ObjetId标准的自定义 objectIds 创建记录的。这里的解释会很棒。
从那里我觉得我可能可以在 Java (Morphia) 世界中弄清楚。谢谢你们的投入!
解决方案
在我看来,这些 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());
推荐阅读
- angular - Ionic 框架登录 API - 预检响应没有 HTTP ok 状态
- c# - 如何构造返回递归外键关系的实体框架查询
- iphone - iPhone 模拟器上没有声音 - xcode 10、Swift 4
- c# - 为什么 CancellationToken 是一个结构体?
- angular - 如何在 ionic 3 应用程序中禁用请求缓存或添加刷新?
- completable-future - Axon & CompletableFuture
- django - 如何在 Django 中为历史表设置自动生成的元字段
- google-sheets - 多个 IF(ISNUMBER(搜索不包括
- bash - 作为参数的文件的 Unix Bash 内容在第一行停止
- c# - MongoDB 和派生类