sql >> Database >  >> NoSQL >> MongoDB

Mongodb Binary _id converteren naar LUUID met node

Dus eerst $binary en BinData zijn in wezen hetzelfde geschreven / weergegeven op verschillende manieren. Met uw voorbeeld en deze referentie kunt u het zo schrijven in de "Mongo Shell"-modus:

BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")

Of in de "strikte" modus wordt dat:

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

Type 3 verwijst hier eigenlijk naar subtype 3 (van het binaire type) volgens de BSON-specificatie, wat betekent dat dit een "UUID (oud)" subtype is. Volgens de bovenstaande referentie is de string zelf eigenlijk een base64 representatie van een binaire string. Hierdoor (ik leid het af) robomongo is in feite het converteren van de UUID en het voor u weergeven wanneer u door de gegevens bladert. Laten we proberen dat handmatig te doen in de mongo shell, eerst door het te converteren naar hex:

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

Laten we dat nu in een UUID-constructor pluggen en kijken of het terug wordt vertaald:

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

En dat doet het - allemaal robomongo doet is het toevoegen van enkele streepjes voor de leesbaarheid. Voor de volledigheid, met uw andere voorbeeld zal ik de streepjes verwijderen en een UUID maken, de BinData tonen versie en terug converteren:

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

Daarom moet u zelf converteren tussen de base64-codering in het knooppunt. Ik heb geen node.js omgeving om te testen, maar het lijkt erop dat dit eerder elders op de site is behandeld.

BEWERKEN:

Dit is een werkende functie in Node.JS die het binaire bestand converteert naar 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. Suggesties voor een eenvoudige .NET gedistribueerde caching-oplossing

  2. kunnen meerdere clients tegelijkertijd toegang krijgen tot dezelfde lijst zonder geblokkeerd te worden in Redis?

  3. De opdracht UNSUBSCRIBE gebruiken in Redis 2.6.11

  4. .NET best practices voor MongoDB-verbindingen?