Was bedeutet das "0" in MongoDBs Bindata (0, "e8menzzofymmd7wshdnrfjyek8m =")?
Frage
Die MongoDB-Shell druckt Binärdaten als Basis64-kodierter Zeichenfolge aus, die in einen Funktionsaufruf eingewickelt sind:
"_id" : BinData(0,"e8MEnzZoFyMmD7WSHdNrFJyEk8M=")
Was bedeutet das "0"?
Lösung
http://docs.mongodb.org/manual/reference/mongodb-extended-json/#binary
Der BSON Bindata -Datenatyp wird über Klassenbindata in der Shell dargestellt. Laufen help misc
für mehr Informationen.
> new BinData(2, "1234")
BinData(2,"1234")
Aus der Hülle
help misc
b = new BinData(subtype,base64str) create a BSON BinData value
Das 0
In Ihrem Fall ist der BSON -Subtyp
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
Ähnliche Frage zu diesem Thread
http://groups.google.com/group/mongodb-dev/browse_thread/thread/1965aa234aa3ef1e
Andere Tipps
Macrolinux hat Recht, aber Sie müssen mit seinem Beispiel vorsichtig sein, da es funktionieren wird, aber zufällig.
Das erste Argument für Bindata () ist der BSON -Binär -Subtyp, der, wie erwähnt wurde, eines der folgenden ist:
generic: \x00 (0)
function: \x01 (1)
old: \x02 (2)
uuid_old: \x03 (3)
uuid: \x04 (4)
md5: \x05 (5)
user: \x80 (128)
Dies sind nur Helfer, damit der Deserializer die Binärdaten je nachdem, was diese Bytes darstellen, unterschiedlich interpretieren kann außer Für den Subtyp 2, der wie der generische Subtyp ist, speichert jedoch ein INT32, das die Länge des Byte -Arrays als die ersten 4 Datenbytes darstellt.
Um jetzt zu sehen, warum das Beispiel falsch ist, werden Sie feststellen, dass das Aufrufen von Bindata (2, "1234") die Binärdatei nicht aus zwei Gründen "1234" speichert:
- Die Bindata -Funktion interpretiert diese Zeichenfolge als Base64 -codierte Zeichenfolge.
- Typ 2 würde erfordern, dass die ersten 4 Bytes ein INT32 sind, der die Länge des Byte -Arrays enthält.
Weitere Informationen finden Sie unter bsonspec.org.
ich glauben Sie entsprechen der BSON -Subtypen:
subtyp :: = " x00" binär / generic | " x01" -Funktion | " x02" binär (alt) | " x03" uUid | " x05" Md5 | " x80" Benutzer definiert
Wenn man sich das ansieht, scheint es das 0
ist fast immer eine gültige Wahl.