Vì vậy, trước tiên hãy tắt $binary
và BinData
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