Så først $binary
og BinData
er dybest set det samme skrevet/repræsenteret på forskellige måder. Ved at bruge dit eksempel og denne reference kan du skrive det sådan i "Mongo Shell"-tilstanden:
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
Eller i "streng" tilstand, der bliver:
{ "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" }
Nu refererer type 3 her faktisk til undertype 3 (af den binære type) ifølge BSON-specifikationen, hvilket betyder, at dette er en "UUID (gammel)" undertype. Ifølge referencen ovenfor er strengen i sig selv en base64
repræsentation af en binær streng. På grund af dette (jeg udleder) robomongo
konverterer dybest set UUID og viser det for dig, når du gennemser dataene. Lad os prøve at gøre det manuelt i stedet for i mongo
shell, først ved at konvertere den til hex:
> var foo = BinData(3, "AAGOBh3pqkWvtaK8AO2U9w==")
> foo.hex()
00018e061de9aa45afb5a2bc00ed94f7
Lad os nu tilslutte det til en UUID-konstruktør og se, om det oversættes tilbage:
> var uuid = new UUID("00018e061de9aa45afb5a2bc00ed94f7")
> uuid
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
Og det gør det - alt sammen robomongo
gør, er at tilføje nogle tankestreger for læsbarheden. For fuldstændighedens skyld vil jeg med dit andet eksempel fjerne bindestregene og oprette et UUID, vise BinData
version og konverter tilbage:
> var bar = UUID("d72f21fe47808040ab3da1fb01045d3a")
> bar
BinData(3,"1y8h/keAgECrPaH7AQRdOg==")
> bar.hex()
d72f21fe47808040ab3da1fb01045d3a
Derfor er det, du skal gøre, selv at konvertere mellem base64-kodningen i noden. Jeg har ikke en node.js
miljø at teste, men det ser ud til, at det er blevet dækket før andre steder på siden.
EDIT:
Dette er en fungerende funktion i Node.JS, der konverterer binær til Hex UUID:
function Bin2HexUUID(bin){
var hex = new Buffer(bin, 'base64').toString('hex');
return hex.replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, function (){
return arguments[1]+"-"+arguments[2]+"-"+arguments[3]+"-"+arguments[4]+"-"+arguments[5];
});
}
//use example
var binary_id = { "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" };
console.log(Bin2HexUUID(binary_id.$binary)); //00018e06-1de9-aa45-afb5-a2bc00ed94f7