Så först $binary
och BinData
är i princip samma sak skriven/representerad på olika sätt. Med ditt exempel och denna referens kan du skriva det så i "Mongo Shell"-läget:
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
Eller i "strikt" läge som blir:
{ "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" }
Nu hänvisar typ 3 här faktiskt till undertyp 3 (av den binära typen) enligt BSON-specifikationen vilket betyder att detta är en "UUID (gammal)" undertyp. Enligt referensen ovan är själva strängen faktiskt en base64
representation av en binär sträng. På grund av detta (jag drar slutsatsen) robomongo
konverterar i princip UUID och visar det åt dig när du bläddrar i data. Låt oss försöka göra det manuellt istället i mongo
skal, först genom att konvertera det till hex:
> var foo = BinData(3, "AAGOBh3pqkWvtaK8AO2U9w==")
> foo.hex()
00018e061de9aa45afb5a2bc00ed94f7
Nu, låt oss koppla in det i en UUID-konstruktör och se om det översätts tillbaka:
> var uuid = new UUID("00018e061de9aa45afb5a2bc00ed94f7")
> uuid
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
Och det gör det - allt robomongo
gör är att lägga till några streck för läsbarheten. Bara för fullständighetens skull, med ditt andra exempel kommer jag att ta bort strecken och skapa ett UUID, visa BinData
version och konvertera tillbaka:
> var bar = UUID("d72f21fe47808040ab3da1fb01045d3a")
> bar
BinData(3,"1y8h/keAgECrPaH7AQRdOg==")
> bar.hex()
d72f21fe47808040ab3da1fb01045d3a
Därför, vad du behöver göra är att konvertera mellan base64-kodningen i noden själv. Jag har ingen node.js
miljö att testa, men det ser ut som att det har behandlats tidigare på andra ställen på webbplatsen.
EDIT:
Detta är en fungerande funktion i Node.JS som konverterar binären till 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