MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Konwertowanie mongodb Binary _id na LUUID za pomocą węzła

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mangusta różnica findOneAndUpdate i aktualizacja

  2. Integracja ClusterControl z SNMP — dowód koncepcji:część pierwsza

  3. Policz pola w kolekcji MongoDB

  4. Odpytywanie MongoDB o dopasowanie w pierwszym elemencie tablicy

  5. Jak zainstalować i skonfigurować MongoDB na Ubuntu?