我的团队在MongoDB 2.4.10上。id字段如下所示

{ "_id" : BinData(3,"fEkTlzkZw8m4JJx5nB+fkw==")

我知道3是bson子类型,值是base64。但这是不是一个反对者?有人告诉我不是。我需要的是一个objectid getTimeStamp()方法。

最佳答案

您看到的是一个具有传统编码的uuid。
然而,正如您已经指出的,与另一个答案中提到的bson types无关。当然,bson类型是0x05,因为它是二进制数据。在控制台上显示为BinData(3, ...)
然而,BinData又有一个“内部类型”,可以说是BinData。这是subtype构造函数的第一个参数。正如您所看到的from the spec33指定它是uuid。
\ x03 uuid(old)-这曾是uuid子类型,但已弃用,取而代之的是\x04。本机UUID类型语言的驱动程序和工具应适当处理\x03。
这意味着这不仅仅是一些二进制数据,不幸的是,大多数uuid(all?)不要包含时间戳,恐怕信息会丢失。
请注意,BinData具有不同的bson类型(0x07),这样比subtype更有效,因为不需要存储额外的子类型信息。换句话说,ObjectId永远不是一个BinData(除非它被显式地存储为通用二进制信息,否则会适得其反)

09-25 17:17