我的团队在 MongoDB 2.4.10 上。id 字段看起来像这样
{ "_id" : BinData(3,"fEkTlzkZw8m4JJx5nB+fkw==")
Run Code Online (Sandbox Code Playgroud)
我知道 3 是 BSON 子类型,值是 Base64。但这是一个 ObjectId 还是不是?有人告诉我不是。我需要的是 ObjectId getTimestamp() 方法。
您看到的是带有 legacy encoding的UUID。
BinData(3, ...)但是,正如您已经指出的那样,与另一个答案中引用的bson 类型无关。当然 bson 类型是 0x05,因为它是二进制数据。这显示BinData在控制台上。
但是,BinData又具有“内部类型”,可以这么说,subtype. 那就是3你看到的BinData构造函数的第一个参数。从规范中可以看出,subtype3 指定它是一个 UUID。
\x03 UUID(旧) - 这曾经是 UUID 子类型,但为了支持 \x04 而被弃用。具有本机 UUID 类型的语言的驱动程序和工具应该适当地处理 \x03。
这意味着这不仅仅是一些二进制数据,但不幸的是,大多数 UUID(全部?)不包含时间戳,因此恐怕信息会丢失。
请注意, anObjectId具有不同的 bson 类型(0x07),这样它比 更有效BinData,因为不需要存储额外的子类型信息。换句话说,BinData永远不是ObjectId(除非它被明确存储为通用二进制信息,这会适得其反)