サードパーティによって作成された非常に大きなデータのコレクションがあります。これには、プレーンASCIIが実際に保存されているBindata「パッケージ」列が含まれています。つまり、テキストを文字列として保存できたはずです。
このコレクションを mongoexport で非常にうまく機能する csv 形式でエクスポートする必要がありますが、出力には「パッケージ」列の 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() }}
);
});
うまくいくまで、検索を 1 つのドキュメントに限定しました。残念ながら、 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 として適切に保存されていることを検証できます。
おそらく、誰もこれほど愚かなことをする必要がなかったからでしょう。