我需要在 Swift 中生成一个带时间戳的 BSON 格式的对象 ID。 ObjectID 用于 Mongo DB。如何实现?
最佳答案
一个简单的解决方案如下所示:
func objectId() -> String {
let time = String(Int(Date().timeIntervalSince1970), radix: 16, uppercase: false)
let machine = String(Int.random(in: 100000 ..< 999999))
let pid = String(Int.random(in: 1000 ..< 9999))
let counter = String(Int.random(in: 100000 ..< 999999))
return time + machine + pid + counter
}
MongoDB docs指定以下有关 ObjectID 的信息
- 一个 4 字节的值,表示自 Unix 纪元以来的秒数
- 一个 3 字节的机器标识符
- 一个 2 字节的进程 ID
- 一个 3 字节的计数器,以一个随机值开始
以上将满足该要求。但是,它只会为时间戳以外的部分生成随机数字字符。一个完美的解决方案是为机器和 pid 使用诸如 NSProcessInfo
和 NSUUID
之类的 API。它还必须跟踪计数器。
关于swift - 如何在 Swift 中生成 Mongo DB ObjectID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36508470/