如何用mongoimport导入二进制数据?

问题描述:

我试过每种组合都导入Mongo的二进制数据,我无法让它工作。我试过使用new BinData(0, <bindata>),我试过使用 { "$binary" : "<bindata>", "$type" : "0" } 第一个给我一个解析错误。第二个给我一个错误,读取“保留字段名称的无效使用”。如何用mongoimport导入二进制数据?

我可以导入其他对象。作为参考,我试图导入BASE64编码的图像字符串。这是我目前的版本我使用的JSON的:

{"_id" : "72984ce4-de03-407f-8911-e7b03f0fec26","OriginalWidth" : 73, "OriginalHeight" : 150, { "$binary" : "", "$type" : "0" }, "ContentType" : "image/jpeg", "Name" : "test.jpg", "Type" : "5ade8812-e64a-4c64-9e23-b3aa7722cfaa"} 
+0

你可以添加一个更完整的代码片段来展示你想要用二进制数据做什么吗?只是想知道这里的用法...... – 2012-02-28 10:34:21

+0

我想出了我需要的东西。如果有兴趣,我将所需的代码片段放在答案块中。不过谢谢! – lewiguez 2012-03-27 13:16:10

其实我想通了,这个问题我想我会回来SO帮人出谁可能是挣扎。

本质上,我正在做的是使用C#生成一个JSON文件。该文件用于运行并引入各种数据的导入脚本。集合中的一个字段需要将二进制图像数据存储为Base64编码的字符串。 Mongo文档(Import Export ToolsImporting Interesting Types)很有帮助,但仅限于某一点。

为了正确地格式化JSON,我必须使用下面的C#代码片段将图像文件作为字节数组并将其转储为字符串。有这样较大的字符串(StringBuilder对于初学者)的更有效的方式,但我简化说明的例子的目的:

byte[] bytes = File.ReadAllBytes(imageFile); 
output = "{\"Data\" : {\"$binary\" : \"" + Convert.ToBase64String(bytes) + "\", \"$type\" : \"00\"}, \"ContentType\" : \"" + GetMimeType(fileInfo.Name) + "\", \"Name\" : \"" + fileInfo.Name + "\"}"; 

我一直在失败的类型部分,顺便说一句。它转换为BSON规范中指定的通用二进制数据:http://bsonspec.org/#/specification

如果你想直接跳到JSON,上面的代码输出字符串非常类似:

{"Data": {"$binary": "[Byte array as Base64 string]", "$type": "00"}, "ContentType": "image/jpeg", "Name": "test.jpg"} 

然后,我只是用mongoimport工具来处理由此产生的JSON。

注意:因为我已经在C#中,所以我可以只使用Mongo DLL并在那里处理,但对于这种特殊情况,我必须在代码中创建JSON文件。娱乐时间。