2015-05-08 33 views
1

我的團隊在MongoDB 2.4.10上。 ID字段看起來像這樣BinData是一個Mongo ObjectId嗎?

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

我知道3是BSON子類型,值是Base64。但是這是不是ObjectId?我被告知它不是。我需要的是一個ObjectId getTimestamp()方法。

回答

2

你看到的是一個UUID與傳統編碼

BinData(3, ...)但是,與bson types沒有任何關係,正如另​​一個答案中所引用的,正如您已經指出的那樣。當然,bson類型是0x05,因爲它是二進制數據。在控制檯上顯示爲BinData

但是,BinData又有一個'內部類型',可以這麼說,subtype。這就是3,你看到它是BinData構造函數的第一個參數。正如你可以看到from the specsubtype 3指定它是一個UUID。

\ x03 UUID(舊) - 它曾經是UUID子類型,但不贊成使用\ x04。具有本機UUID類型的語言的驅動程序和工具應該適當地處理\ x03。

這意味着這不僅僅是一些二進制數據,但不幸的是,大多數UUID(全部?)不包含時間戳,所以信息就會丟失。

請注意ObjectId有一個不同的bson類型(0x07),這樣它比BinData更有效率,因爲不需要存儲額外的子類型信息。 換句話說,BinData從來不是ObjectId(除非它明確存儲爲通用二進制信息,這會起反作用)

2

這不是一個ObjectId3是類型Object

你可以簡單地驗證這一點蒙戈客戶端上:

> var a = { "_id" : BinData(3,"fEkTlzkZw8m4JJx5nB+fkw==")}

> a._id instanceof Object

真正,同時在試圖返回

> a._id instanceof ObjectId

false被返回。欲瞭解更多詳情click

相關問題