Yar*_* U. 3 mongodb node.js bson mongoexport
我正在尝试将数据从 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 的问答 - 但他们都没有展示如何转换它
所以,首先$binary,BinData基本上是相同的东西,以不同的方式书写/表示。使用您的示例和此参考,您可以在“Mongo Shell”模式下像这样编写它:
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
Run Code Online (Sandbox Code Playgroud)
或者在“严格”模式下变成:
{ "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" }
Run Code Online (Sandbox Code Playgroud)
现在,这里的类型 3 实际上是指根据BSON 规范的子类型 3(二进制类型),这意味着这是“UUID(旧)”子类型。根据上面的参考,字符串本身实际上base64是二进制字符串的表示。因此(我推断)robomongo基本上是转换 UUID 并在您浏览数据时为您显示它。让我们尝试在mongoshell中手动执行此操作,首先将其转换为十六进制:
> var foo = BinData(3, "AAGOBh3pqkWvtaK8AO2U9w==")
> foo.hex()
00018e061de9aa45afb5a2bc00ed94f7
Run Code Online (Sandbox Code Playgroud)
现在,让我们将其插入到 UUID 构造函数中,看看它是否会转换回来:
> var uuid = new UUID("00018e061de9aa45afb5a2bc00ed94f7")
> uuid
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
Run Code Online (Sandbox Code Playgroud)
而且,它确实 -robomongo所做的就是添加一些破折号以提高可读性。为了完整起见,在您的另一个示例中,我将删除破折号并创建一个 UUID,显示BinData版本并转换回来:
> var bar = UUID("d72f21fe47808040ab3da1fb01045d3a")
> bar
BinData(3,"1y8h/keAgECrPaH7AQRdOg==")
> bar.hex()
d72f21fe47808040ab3da1fb01045d3a
Run Code Online (Sandbox Code Playgroud)
因此,您需要做的是自己在 node 中的 base64 编码之间进行转换。我没有node.js要测试的环境,但网站上的其他地方之前似乎已经涵盖 了该环境。
这是 Node.JS 中的一个工作函数,可将二进制文件转换为十六进制 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7843 次 |
| 最近记录: |