当前位置: 首页 > 面试题库 >

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

蓬野
2023-03-14
问题内容

我正在尝试将数据从mongodb移动到mysql

我用来mongoexport将数据从mongodb数据库导出到.json文件

当我使用robomongo浏览mongodb集合时,我得到的是旧版UUID格式的ID(类似,LUUID("00018e06-1de9-aa45-afb5-a2bc00ed94f7")但在导出的.json文件中,它的显示方式如下:
{ "_id" : { "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" }, ...}

是否有任何方法可以使用Node.JS将后者转换为robomongo中看到的格式?

PS我见过很多引用Binary和BinData的问答-但是没有一个人展示了如何转换它


问题答案:

因此,首先$binaryBinData基本上是相同的事物以不同的方式编写/表示。使用示例和此参考,您可以在“ 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")
> uuid
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")

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

> var bar = UUID("d72f21fe47808040ab3da1fb01045d3a")
> bar
BinData(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 example
var binary_id = { "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" };
console.log(Bin2HexUUID(binary_id.$binary)); //00018e06-1de9-aa45-afb5-a2bc00ed94f7


 类似资料:
  • 问题内容: 我有一个必须解析的二进制文件,并且正在使用Python。有没有办法占用4个字节并将其转换为单个精度浮点数? 问题答案:

  • 我面临的挑战是: > 文本节点可以包括具有和定义的TSPAN。创建的路径必须与每个childNode字母(tspans)完美地对齐。 检索文本节点的实际位置数据,以及每个tspan。这就是我遇到麻烦的地方,希望有更多经验的人能帮助我。由于笔画宽度和其他属性会影响定位/bbox值,所以我不确定为文本获取正确定位数据的最有效方法是什么。 textToPaths函数是一个paper函数,它应该循环遍历p

  • 我想从XML结构中使用单个节点创建嵌套的XML节点,我尝试过但无法带来嵌套的XML结构,请一些人帮助我,我无法获得预期的行为。 XML结构: XSL使用: 收到的输出: 预期产出 “人员非活动”元素应用于匹配

  • 问题内容: 这里n2是我的NodeList,我只想查看我的根元素的第一个子节点 这就是logcat所说的 问题答案: 像这样尝试。

  • 我想将字节转换为JsonObject。我试着这样: 但我遇到编译器错误: 我怎么能这样呢?

  • 您能帮助如何用子节点分割成半节点吗? 输入: 输出: 不幸的是,我对xslt没有经验,也没有找到这样的例子。 更新后,我尝试了下面建议的方法之一,并有这个https://xsltfiddle.liberty-development.net/jyH9rNq/3节点不复制 xslt: 输出: