不确定这是否是您要查找的内容,但当我访问此页面时,这正是我所要查找的内容。我有 java.util.UUID/fromString 在 Mongo 中创建了 UUID 作为主键,我想在 UI 中使用普通字符串 UUID。我正在使用node-mongodb-native。
var Binary = require('mongodb').Binary;
var toUUID, toBinData;
module.exports.toUUID = toUUID = function(binId) {
var hex = binId.toString('hex');
return
hex.substr(0, 8) + '-' +
hex.substr(8, 4) + '-' +
hex.substr(12, 4) + '-' +
hex.substr(16, 4) + '-' +
hex.substr(20, 12);
};
module.exports.toBinData = toBinData = function(uuid) {
var buf = new Buffer(uuid.replace(/-/g, ''), 'hex');
return new Binary(buf, Binary.SUBTYPE_UUID_OLD);
};
更新
事实证明,虽然上面的方法工作得很好(因为它以两种方式进行转换),但它不会产生与我在 Clojure 代码中看到的相同的字符串 UUID。但是同样的uuidhelpers 可以救援 - 下面适用于 Java 旧版 UUID。
var Binary = require('mongodb').Binary;
var toJUUID, toBinData;
module.exports.toJUUID = toJUUID = function(binId) {
var hex = binId.buffer.toString('hex');
var msb = hex.substr(0, 16);
var lsb = hex.substr(16, 16);
msb = msb.substr(14, 2) + msb.substr(12, 2) + msb.substr(10, 2) + msb.substr(8, 2) + msb.substr(6, 2) + msb.substr(4, 2) + msb.substr(2, 2) + msb.substr(0, 2);
lsb = lsb.substr(14, 2) + lsb.substr(12, 2) + lsb.substr(10, 2) + lsb.substr(8, 2) + lsb.substr(6, 2) + lsb.substr(4, 2) + lsb.substr(2, 2) + lsb.substr(0, 2);
hex = msb + lsb;
return hex.substr(0, 8) + '-' + hex.substr(8, 4) + '-' + hex.substr(12, 4) + '-' + hex.substr(16, 4) + '-' + hex.substr(20, 12);
};
module.exports.toBinData = toBinData = function(uuid) {
var hex = uuid.replace(/[{}-]/g, "");
var msb = hex.substr(0, 16);
var lsb = hex.substr(16, 16);
msb = msb.substr(14, 2) + msb.substr(12, 2) + msb.substr(10, 2) + msb.substr(8, 2) + msb.substr(6, 2) + msb.substr(4, 2) + msb.substr(2, 2) + msb.substr(0, 2);
lsb = lsb.substr(14, 2) + lsb.substr(12, 2) + lsb.substr(10, 2) + lsb.substr(8, 2) + lsb.substr(6, 2) + lsb.substr(4, 2) + lsb.substr(2, 2) + lsb.substr(0, 2);
hex = msb + lsb;
return new Binary(new Buffer(hex, 'hex'), Binary.SUBTYPE_UUID_OLD);
};
按照相同的复制/粘贴方法,您可以从帮助程序中剥离有效的 C# 代码。您只需要稍微不同地处理缓冲区。