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

Conversione di mongodb Binary _id in LUID utilizzando node

Quindi, prima di tutto $binary e BinData sono fondamentalmente la stessa cosa scritta/rappresentata in modi diversi. Usando il tuo esempio e questo riferimento puoi scriverlo in questo modo nella modalità "Mongo Shell":

BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")

Oppure in modalità "rigorosa" che diventa:

{ "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" }

Ora, il tipo 3 qui si riferisce effettivamente al sottotipo 3 (del tipo binario) secondo le specifiche BSON, il che significa che questo è un sottotipo "UUID (vecchio)". Per il riferimento sopra, la stringa stessa è in realtà un base64 rappresentazione di una stringa binaria. Per questo (sto deducendo) robomongo fondamentalmente sta convertendo l'UUID e visualizzandolo per te durante la navigazione dei dati. Proviamo a farlo manualmente invece nel mongo shell, prima convertendolo in esadecimale:

> var foo = BinData(3, "AAGOBh3pqkWvtaK8AO2U9w==")
> foo.hex()
00018e061de9aa45afb5a2bc00ed94f7

Ora inseriamolo in un costruttore UUID e vediamo se si traduce indietro:

> var uuid = new UUID("00018e061de9aa45afb5a2bc00ed94f7")
> uuid
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")

E lo fa - tutto robomongo sta facendo è aggiungere alcuni trattini per la leggibilità. Solo per completezza, con l'altro tuo esempio rimuoverò i trattini e creerò un UUID, mostrerò il BinData versione e riconvertire:

> var bar = UUID("d72f21fe47808040ab3da1fb01045d3a")
> bar
BinData(3,"1y8h/keAgECrPaH7AQRdOg==")
> bar.hex()
d72f21fe47808040ab3da1fb01045d3a

Quindi, quello che devi fare è convertire tu stesso la codifica base64 nel nodo. Non ho un node.js ambiente da testare, ma sembra che sia già stato trattato in altre parti del sito.

MODIFICA:

Questa è una funzione funzionante in Node.JS che converte il binario in UUID esadecimale:

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