我已尝试过为Mongo导入二进制数据的每个组合,但我无法使其工作。我尝试过使用new BinData(0, <bindata>)
,我尝试过使用
{
"$binary" : "<bindata>",
"$type" : "0"
}
第一个给我一个解析错误。第二个给我一个错误,上面写着“无效使用保留字段名称。”
我可以很好地导入其他对象。作为参考,我正在尝试导入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 :(得分:4)
我实际上已经发现了这个问题,并且认为我会回到SO帮助那些可能正在挣扎的人。
基本上,我所做的是使用C#生成JSON文件。该文件用于运行并引入各种数据的导入脚本。集合中的一个字段需要将二进制图像数据存储为Base64编码的字符串。 Mongo文档(Import Export Tools和Importing 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文件码。有趣的时光。