sql >> Database teknologi >  >> NoSQL >> MongoDB

Konvertering af mongodb Binary _id til LUUID ved hjælp af node

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



  1. Forstå Laravel caching:Cache facade og Redis

  2. importerer JSON til mongoDB ved hjælp af pymongo

  3. Redis replikering og redis sharding (cluster) forskel

  4. Hvad er en god strategi til at gruppere lignende ord?