MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Chuyển đổi mongodb Binary _id thành LUUID bằng cách sử dụng nút

Vì vậy, trước tiên hãy tắt $binaryBinData về cơ bản là cùng một thứ được viết / thể hiện theo những cách khác nhau. Sử dụng ví dụ của bạn và tham chiếu này, bạn có thể viết nó như vậy ở chế độ "Mongo Shell":

BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")

Hoặc ở chế độ "nghiêm ngặt" trở thành:

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

Bây giờ, loại 3 ở đây thực sự đề cập đến loại phụ 3 (thuộc loại nhị phân) theo thông số BSON, có nghĩa là đây là loại phụ "UUID (cũ)". Theo tham chiếu ở trên, bản thân chuỗi thực sự là một base64 biểu diễn của một chuỗi nhị phân. Bởi vì điều này (tôi đang suy luận) robomongo về cơ bản là chuyển đổi UUID và hiển thị nó cho bạn khi bạn đang duyệt dữ liệu. Thay vào đó, hãy cố gắng làm điều đó theo cách thủ công trong mongo shell, trước tiên bằng cách chuyển nó thành hex:

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

Bây giờ, hãy cắm nó vào một phương thức khởi tạo UUID và xem liệu nó có dịch ngược trở lại hay không:

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

Và, nó có - tất cả robomongo đang làm là thêm một số dấu gạch ngang để dễ đọc. Chỉ để hoàn thiện, với ví dụ khác của bạn, tôi sẽ xóa dấu gạch ngang và tạo UUID, hiển thị BinData phiên bản và chuyển đổi trở lại:

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

Do đó, những gì bạn cần làm là tự mình chuyển đổi giữa mã hóa base64 trong nút. Tôi không có node.js môi trường để kiểm tra, nhưng có vẻ như điều đó đã được đề cập trước đó ở những nơi khác trên trang web.

CHỈNH SỬA:

Đây là một hàm hoạt động trong Node.JS chuyển đổi nhị phân thành 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB ::ID Mongo có phải là duy nhất trên các bộ sưu tập không?

  2. Hiểu các tùy chọn sao lưu MongoDB

  3. Làm cách nào để sắp xếp mảng bên trong bản ghi bộ sưu tập trong MongoDB?

  4. Ngăn Mongoose tạo thuộc tính _id cho các mục mảng tài liệu con

  5. Làm cách nào để tránh cảnh báo transparent_hugepage / defrag từ mongodb?