Domanda

La shell MongoDB stampa i dati binari come stringa codificata Base64 avvolta in quella che sembra una chiamata di funzione:

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

Cosa significa "0"?

È stato utile?

Soluzione

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

Il tipo di dati BSON Bindata è rappresentato tramite classe Bintata nella shell. Correre help misc per maggiori informazioni.

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

dal guscio

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

Il 0 Nel tuo caso è il sottotipo 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

Domanda simile su questo thread

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

Altri suggerimenti

Macrolinux ha ragione ma devi stare attento al suo esempio in quanto funzionerà ma per caso.

Il primo argomento a Bintata () è il sottotipo binario BSON che, come è stato menzionato, è uno dei seguenti:

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

Questi sono solo aiutanti in modo che il deserializzatore possa interpretare i dati binari in modo diverso a seconda di ciò che rappresentano quei byte tranne Per il sottotipo 2 che è come il sottotipo generico ma memorizza un INT32 che rappresenta la lunghezza dell'array di byte come primi 4 byte di dati.

Ora per capire perché l'esempio è sbagliato, noterai che chiamare Bintata (2, "1234") non memorizza il binario che rappresenta la stringa "1234" per due motivi:

  • La funzione Bindata interpreta quella stringa come stringa codificata da base64.
  • Il tipo 2 richiederebbe che i primi 4 byte siano un int32 contenente la lunghezza dell'array di byte.

Vedi bSonspec.org per ulteriori informazioni.

io ritenere Si corrispondono al Sottotipi BSON:

sottotipo :: = " x00" binario / generico | Funzione " x01" | " x02" binario (vecchio) | " x03" uuid | " x05" MD5 | " x80" definito dall'utente

Guardando quello, sembra che 0 è quasi sempre una scelta valida.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top