MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mengonversi mongodb Binary _id ke LUUID menggunakan node

Jadi, pertama-tama $binary dan BinData pada dasarnya adalah hal yang sama ditulis/diwakili dengan cara yang berbeda. Dengan menggunakan contoh Anda dan referensi ini, Anda dapat menulisnya seperti itu dalam mode "Mongo Shell":

BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")

Atau dalam mode "ketat" yang menjadi:

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

Sekarang, tipe 3 di sini sebenarnya mengacu pada subtipe 3 (dari tipe biner) per spesifikasi BSON yang berarti ini adalah subtipe "UUID (lama)". Per referensi di atas, string itu sendiri sebenarnya adalah base64 representasi dari string biner. Karena itu (saya menyimpulkan) robomongo pada dasarnya mengonversi UUID dan menampilkannya untuk Anda saat Anda menelusuri data. Mari kita coba melakukannya secara manual di mongo shell, pertama dengan mengubahnya menjadi hex:

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

Sekarang, mari kita tancapkan itu ke konstruktor UUID dan lihat apakah itu diterjemahkan kembali:

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

Dan memang benar - semua robomongo lakukan adalah menambahkan beberapa tanda hubung agar mudah dibaca. Hanya untuk kelengkapan, dengan contoh Anda yang lain, saya akan menghapus tanda hubung dan membuat UUID, tunjukkan BinData versi dan konversi kembali:

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

Oleh karena itu, yang perlu Anda lakukan adalah mengonversi antara pengkodean base64 di node sendiri. Saya tidak memiliki node.js lingkungan untuk diuji, tetapi sepertinya itu telah dibahas sebelumnya di tempat lain di situs.

EDIT:

Ini adalah fungsi kerja di Node.JS yang mengubah biner menjadi UUID Hex:

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. Bagaimana menemukan catatan acak di Mongoose

  2. Bagaimana cara mengurutkan dalam luwak?

  3. Bidang yang Dihasilkan Otomatis untuk MongoDB menggunakan Spring Boot

  4. Mengulangi kursor mongodb secara serial (menunggu panggilan balik sebelum pindah ke dokumen berikutnya)

  5. MongoDB $sum dan $avg sub dokumen