Что означает «0» в BinData MongoDB (0, «e8MEnzZoFyMmD7WSHdNrFJyEk8M =»)? - PullRequest
14 голосов
/ 18 февраля 2012

Оболочка MongoDB печатает двоичные данные в виде строки в кодировке Base64, завернутой в нечто похожее на вызов функции:

"_id" : BinData(0,"e8MEnzZoFyMmD7WSHdNrFJyEk8M=")

Что означает "0"?

Ответы [ 3 ]

17 голосов
/ 18 февраля 2012

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

7 голосов
/ 03 апреля 2013

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 для получения дополнительной информации.

1 голос
/ 18 февраля 2012

I верят они соответствуют подтипам BSON :

подтип :: = "\ x00" Двоичные / общие |Функция \ x01 |"\ x02" Двоичный (Старый) |"\ x03" UUID |"\ x05" MD5 |"\ x80" Определяется пользователем

Глядя на это, кажется, что 0 почти всегда является правильным выбором.

...