-2

今天我正在做一些工作,当我注意到我的一个 MongoDB 文档中有一些奇怪的东西时:

猫头鹰不是他们看起来的那样

Mongo 在 ObjectID 中拼写单词是否正常,或者这是否表明生成_id字段的随机化存在问题?

我会密切关注这一点,但如果有人有任何关于这是否应该关注的信息,请提前感谢您的帮助。

4

1 回答 1

4

好吧,这只是一个没有认真意图的有趣的复活节彩蛋。欢迎来到 8 月 25 日。

这里纯粹的机会是“53facade”恰好对应于纪元时间:

“格林威治标准时间 2014 年 8 月 25 日星期一 05:34:22”。

纵观整个部分:

ObjectId 是一个 12 字节的 BSON 类型,使用以下方法构造:

  • 一个 4 字节的值,表示自 Unix 纪元以来的秒数,
  • 一个 3 字节的机器标识符,
  • 一个 2 字节的进程 ID,以及
  • 一个 3 字节的计数器,从一个随机值开始。

因此,开放的 4-btye 表示(在所有字符中都是有效的十六进制)是从创建时的当前时间戳值派生的,恰好是发生1408944862这种情况的时候。

无非是巧合而且完全有效。正如您所看到的,它是标识符的“其余部分”,它决定了 ObjectId 的“随机性”和“唯一”属性,因为此时创建的所有 ObjectId 值在 1000 毫秒的时间间隔内都是相同的。

这里没有错误或弱点,只是一天中的一个有趣点。

于 2014-08-25T07:48:06.207 回答