sql >> Databasteknik >  >> NoSQL >> MongoDB

Konvertera mongodb Binary _id till LUUID med hjälp av nod

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



  1. Få värden med jedis pipeline

  2. Bulk upsert i MongoDB med mongoose

  3. Hur ansluter man till en Redis-behållare med Docker Compose?

  4. Express Node.JS - Tar emot Redis-återuppringning, utför löften