2012-02-18 143 views

回答

13

http://docs.mongodb.org/manual/reference/mongodb-extended-json/#binary

的BSON BinData數據類型在殼經由類BinData表示。運行help misc瞭解更多信息。

> new BinData(2, "1234") 
BinData(2,"1234") 

從殼

help misc 
b = new BinData(subtype,base64str) create a BSON BinData value 

你的情況0是BSON亞型

http://bsonspec.org/#/specification

binary ::= int32 subtype (byte*) Binary - The int32 is the number of bytes in the (byte*). 
subtype ::= "\x00" Generic binary subtype 
    | "\x01" Function 
    | "\x02" Binary (Old) 
    | "\x03" UUID (Old) 
    | "\x04" UUID 
    | "\x05" MD5 
    | "\x80" User defined 

在此線程類似問題

http://groups.google.com/group/mongodb-dev/browse_thread/thread/1965aa234aa3ef1e

+0

有趣。這些亞型用於任何事情嗎? – Thilo 2012-02-18 07:03:08

+1

我想是這樣:-)。詢問的最佳地點是BSON組織。明確地說,新的'\ x00'和歷史'\ x02'(http://groups.google.com/group/bson/browse_thread/thread/c45f78fba9311975)之間存在差異是有原因的。對於UUID和MD5(我的觀點)是爲了優化。兩者都是固定長度的十六進制(16字節/ 128位/ 32位十六進制數字,佈局位不同的UUID有'-')並且被廣泛使用,驅動程序實現者可以優化讀/寫。 – 2012-02-18 07:39:41

+0

我不知道這裏的驅動程序可以優化什麼。所有的二進制類型都存儲爲'length(int32)子類型字節字節*'。固定長度與否,存儲長度。數據以原始字節(不是十六進制)存儲。也許一個數據驗證的選項?或者爲了顯示目的:UUID可以比'BinData(3,........)'更好地顯示? – Thilo 2012-02-18 09:29:35

1

相信他們自己對應BSON subtypes

亞型:: = 「\ x00的」 二進制/通用 | 「\ x01」功能 | 「\ x02」二進制(舊) | 「\ x03」UUID | 「\ x05」MD5 | 「\ x80」用戶自定義

看這個,看起來0幾乎總是一個有效的選擇。

6

Macrolinux是正確的,但你必須小心他的例子,因爲它會工作,但意外。

的第一個參數BinData()是BSON二進制亞型,正如已經提到的是下列之一:

generic: \x00 (0) 
function: \x01 (1) 
old:  \x02 (2) 
uuid_old: \x03 (3) 
uuid:  \x04 (4) 
md5:  \x05 (5) 
user:  \x80 (128) 

這些只是助手以便解串器能夠解釋二進制數據不同,具體取決於這些字節代表,除了子類型2的,它與泛型子類型相似,但是將代表字節數組長度的int32存儲爲前4個字節的數據。

現在明白爲什麼例子是錯誤的,你會注意到,調用BinData(2,「1234」)不二進制表示字符串「1234」存儲有兩個原因:

  • 的BinData函數將該字符串解釋爲base64編碼的字符串。
  • 類型2將要求前4個字節是包含字節數組長度的int32。

請參閱bsonspec.org瞭解更多信息。