栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用节点将mongodb Binary _id转换为LUUID

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用节点将mongodb Binary _id转换为LUUID

因此,首先

$binary
BinData
基本上是相同的事物以不同的方式编写/表示。使用示例和此参考,您可以在“ Mongo Shell”模式下将其编写为:

BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")

或在“严格”模式下变为:

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

现在,这里的类型3实际上是根据BSON规范引用的(二进制类型的)子类型3,这意味着这是“
UUID(旧)”子类型。根据上面的参考,字符串本身实际上

base64
是二进制字符串的表示。因此(我在推断)
robomongo
基本上是在浏览数据时转换UUID并为您显示。让我们尝试在
mongo
外壳中手动进行操作,首先将其转换为十六进制:

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

现在,让我们将其插入UUID构造函数中,看看它是否可以转换回去:

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

而且,确实如此-

robomongo
所做的只是添加一些破折号以提高可读性。为了完整起见,在另一个示例中,我将删除破折号并创建一个UUID,显示
BinData
版本并转换回:

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

因此,您需要做的是自己在node中的base64编码之间进行转换。我没有

node.js
环境测试,但看起来已经覆盖之前在其他地方的网站上。

编辑:

这是Node.JS中的一个工作函数,它将二进制文件转换为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 examplevar binary_id = { "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" };console.log(Bin2HexUUID(binary_id.$binary)); //00018e06-1de9-aa45-afb5-a2bc00ed94f7


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406575.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号