2012-02-18 31 views

Trả lời

13

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

Các BSON BinData datatype được thể hiện qua lớp BinData trong vỏ. Chạy help misc để biết thêm thông tin.

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

từ vỏ

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

Các 0 trong trường hợp của bạn là kiểu phụ 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 

câu hỏi tương tự về chủ đề này

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

+0

Thú vị. Các kiểu con đó có được sử dụng cho bất kỳ thứ gì không? – Thilo

+1

Tôi đoán vậy :-). Nơi tốt nhất để hỏi là nhóm BSON. Chắc chắn, có một lý do cho sự khác biệt giữa '\ x00' mới và lịch sử' \ x02' (http://groups.google.com/group/bson/browse_thread/thread/c45f78fba9311975). Đối với UUID và MD5 (ý kiến ​​của tôi) là để tối ưu hóa. Cả hai đều có chiều dài cố định thập lục phân (16-byte/128-bit/32 chữ số thập lục phân, bit bố cục UUID khác nhau có '-') và được sử dụng rộng rãi, trình cài đặt trình điều khiển có thể tối ưu hóa việc đọc/ghi. –

+0

Tôi không biết những gì một trình điều khiển có thể tối ưu hóa ở đây. Tất cả các kiểu nhị phân được lưu trữ dưới dạng các byte byte kiểu phụ (int32) * '. Cố định chiều dài hay không, chiều dài được lưu trữ. Và dữ liệu được lưu trữ dưới dạng byte thô (không phải hệ thập lục phân). Có lẽ một tùy chọn để xác thực dữ liệu? Hoặc cho mục đích hiển thị: UUID có thể được hiển thị đẹp hơn 'BinData (3, ........)'? – Thilo

1

tôi tin họ chúng tương ứng với các BSON subtypes:

kiểu phụ :: = "\ x00" Binary/Generic | "\ x01" Chức năng | "\ x02" nhị phân (cũ) | "\ x03" UUID | "\ x05" MD5 | "\ x80" Người dùng được xác định

Nhìn vào điều đó, dường như 0 hầu như luôn là lựa chọn hợp lệ.

6

Macrolinux là đúng nhưng bạn phải cẩn thận với ví dụ của mình vì nó sẽ hoạt động nhưng vô tình.

Đối số đầu tiên để BinData() là BSON kiểu phụ nhị phân trong đó, như đã được đề cập là một trong những điều sau đây:

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

Đây chỉ là những người giúp đỡ để các deserializer có thể giải thích các dữ liệu nhị phân khác nhau tùy thuộc trên những gì các byte đại diện cho ngoại trừ cho loại phụ 2 giống như loại phụ chung nhưng lưu trữ int32 đại diện cho độ dài của mảng byte là 4 byte đầu tiên của dữ liệu.

Bây giờ để xem tại sao ví dụ này là sai, bạn sẽ lưu ý rằng gọi BinData (2, "1234") không lưu trữ nhị phân đại diện cho chuỗi "1234" vì hai lý do:

  • Các BinData chức năng diễn giải chuỗi đó dưới dạng chuỗi được mã hóa base64.
  • Loại 2 sẽ yêu cầu 4 byte đầu tiên là int32 chứa độ dài của mảng byte.

Xem bsonspec.org để biết thêm thông tin.

Các vấn đề liên quan