MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Преобразуване на mongodb Binary _id в LUUID с помощта на възел

И така, първо $binary и BinData са основно едно и също нещо, написано/представено по различни начини. Използвайки вашия пример и тази справка, можете да го напишете така в режим "Mongo Shell":

BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")

Или в „строг“ режим, който става:

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

Сега, тип 3 тук всъщност се отнася до подтип 3 (от двоичен тип) според спецификацията на BSON, което означава, че това е подтип "UUID (стар)". Според препратката по-горе самият низ всъщност е base64 представяне на двоичен низ. Поради това (правя извод) robomongo по същество преобразува UUID и го показва за вас, когато разглеждате данните. Нека се опитаме да направим това ръчно вместо в mongo shell, първо като го преобразувате в шестнадесетичен:

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

Сега нека го включим в UUID конструктор и да видим дали се превежда обратно:

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

И го прави - всичко robomongo прави, добавя някои тирета за четливост. Само за пълнота, с другия ви пример ще премахна тирета и ще създам UUID, покажа BinData версия и конвертирайте обратно:

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

Следователно това, което трябва да направите, е сами да преобразувате между кодирането на base64 в възел. Нямам node.js среда за тестване, но изглежда, че това е било разгледано преди другаде в сайта.

РЕДАКТИРАНЕ:

Това е работеща функция в Node.JS, която преобразува двоичния файл в шестнадесетичен 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. В MongoDB mapreduce, как мога да изгладя обекта със стойности?

  2. Декодиране на регистрационните файлове за грешки в MongoDB

  3. Как да задам първичен ключ в MongoDB?

  4. MongoDB $range

  5. задайте полето като празно за обект mongo с помощта на mongoose