我的團隊在MongoDB 2.4.10上。 ID字段看起來像這樣BinData是一個Mongo ObjectId嗎?
{ "_id" : BinData(3,"fEkTlzkZw8m4JJx5nB+fkw==")
我知道3是BSON子類型,值是Base64。但是這是不是ObjectId?我被告知它不是。我需要的是一個ObjectId getTimestamp()方法。
我的團隊在MongoDB 2.4.10上。 ID字段看起來像這樣BinData是一個Mongo ObjectId嗎?
{ "_id" : BinData(3,"fEkTlzkZw8m4JJx5nB+fkw==")
我知道3是BSON子類型,值是Base64。但是這是不是ObjectId?我被告知它不是。我需要的是一個ObjectId getTimestamp()方法。
你看到的是一個UUID與傳統編碼。
BinData(3, ...)
但是,與bson types沒有任何關係,正如另一個答案中所引用的,正如您已經指出的那樣。當然,bson類型是0x05,因爲它是二進制數據。在控制檯上顯示爲BinData
。
但是,BinData
又有一個'內部類型',可以這麼說,subtype
。這就是3
,你看到它是BinData
構造函數的第一個參數。正如你可以看到from the spec,subtype
3指定它是一個UUID。
\ x03 UUID(舊) - 它曾經是UUID子類型,但不贊成使用\ x04。具有本機UUID類型的語言的驅動程序和工具應該適當地處理\ x03。
這意味着這不僅僅是一些二進制數據,但不幸的是,大多數UUID(全部?)不包含時間戳,所以信息就會丟失。
請注意ObjectId
有一個不同的bson類型(0x07),這樣它比BinData
更有效率,因爲不需要存儲額外的子類型信息。 換句話說,BinData
從來不是ObjectId
(除非它明確存儲爲通用二進制信息,這會起反作用)