我有一個相當大的第三方數據集合,它包含一個實際存儲純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