Więc najpierw $binary
i BinData
to w zasadzie to samo napisane/reprezentowane na różne sposoby. Korzystając ze swojego przykładu i tego odniesienia, możesz napisać to w ten sposób w trybie „Mongo Shell”:
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
Lub w trybie „ścisłym”, który zmienia się w:
{ "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" }
Teraz typ 3 tutaj faktycznie odnosi się do podtypu 3 (typu binarnego) zgodnie ze specyfikacją BSON, co oznacza, że jest to podtyp „UUID (stary)”. Zgodnie z powyższym odniesieniem, sam ciąg jest w rzeczywistości base64
reprezentacja ciągu binarnego. Z tego powodu (wnioskuję) robomongo
zasadniczo konwertuje identyfikator UUID i wyświetla go podczas przeglądania danych. Spróbujmy zrobić to ręcznie w mongo
shell, najpierw konwertując go na szesnastkowy:
> var foo = BinData(3, "AAGOBh3pqkWvtaK8AO2U9w==")
> foo.hex()
00018e061de9aa45afb5a2bc00ed94f7
Teraz podłączmy to do konstruktora UUID i zobaczmy, czy tłumaczy się z powrotem:
> var uuid = new UUID("00018e061de9aa45afb5a2bc00ed94f7")
> uuid
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
I tak – wszystkie robomongo
robi to dodawanie kresek dla czytelności. Tylko dla kompletności, z twoim innym przykładem usunę myślniki i utworzę UUID, pokażę BinData
wersja i przekonwertuj z powrotem:
> var bar = UUID("d72f21fe47808040ab3da1fb01045d3a")
> bar
BinData(3,"1y8h/keAgECrPaH7AQRdOg==")
> bar.hex()
d72f21fe47808040ab3da1fb01045d3a
Dlatego musisz samodzielnie przekonwertować kodowanie base64 w węźle. Nie mam node.js
środowisko do przetestowania, ale wygląda na to, że zostało to omówione wcześniej w innym miejscu na stronie.
EDYTUJ:
To jest działająca funkcja w Node.JS, która konwertuje binarny na szesnastkowy 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