我有一个相当大的第三方数据集合,它包含一个实际存储纯ASCII的Bindata“包”列。 我的意思是,他们可以将文本存储为字符串。在mongodb中导出保存为Bindata的文本
我必须以csv格式导出这个集合,这对于mongoexport来说效果很好,但是输出包含“包”列的base64编码值。我需要该栏中的实际文字,而不是BinData(0,\"NDYuN.....==")
。
什么我试过到目前为止是一个新列“RAWDATA”,类似这样的更新集合:
db.segments.find({"_id" : ObjectId("4fc79525f65181293930070b")}).forEach(function(data) {
db.segments.update(
{_id:data._id},
{$set:{ "rawData" : data.package.toString() }}
);
});
我已经限制查找到只有一个文件,直到我得到它的权利。 不幸的是toString并没有达到我期望的魔法。
而且,我已经试过这样:
db.segments.find({"_id" : ObjectId("4fc79525f65181293930070b")}).forEach(function(data){
data.package = new String(data.package);
db.segments.save(data);
});
结果更惨。
如果我使用php读取文档,$response = $db->execute('return db.segments.findOne()');
然后print_r($response)
,我可以验证数据是否正确存储为base64。
我无法在任何地方找到解决方案,也许是因为没有人需要像这样做一些愚蠢的事情。
谢谢,这是一个非常好的答案!我选择了PHP的方式,但其他功能也很好。唯一的问题是,我不得不从用法示例中删除'.substr(4)',因为我的数据被“裁剪”(结果以72247而不是46.772247开头)。 – ceteras 2012-07-11 08:20:31
有趣。介意我问你使用的MongoDB的版本是什么?上面有2.1.0运行。如果我插入二进制数据“foo”,然后在JS控制台中选择它,它的'hex()'方法返回'03000000666f6f'。 – jmikola 2012-07-11 15:33:41
我正在使用1.8.2 – ceteras 2012-08-01 14:43:12