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