제 3 자에 의해 만들어진 꽤 큰 데이터 콜렉션이 있는데, 보통 ASCII가 실제로 저장된 Bindata "패키지"컬럼을 포함하고 있습니다. 그들은 텍스트를 문자열로 저장할 수있었습니다.Bongata로 저장된 텍스트를 mongodb에 내 보냅니다.
이 컬렉션을 csv 형식으로 내 보내야합니다.이 컬렉션은 mongoexport와 잘 호환되지만 출력에는 "패키지"열의 base64 인코딩 값이 포함되어 있습니다. BinData(0,\"NDYuN.....==")
이 아니라 해당 열의 실제 텍스트가 필요합니다. 지금까지 IS 같은 새 열 "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)
을 읽으면
, 나는 64 기수로, 데이터가 제대로 저장되어있는 것을 확인할 수 있습니다.
어디서나 솔루션을 찾을 수 없었습니다. 아무도 이처럼 어리석은 짓을 할 필요가 없었기 때문일 것입니다.
감사합니다. 아주 좋은 답변입니다. 나는 PHP 방식을 선택했지만 다른 기능도 훌륭하게 작동합니다. 유일한 방법은, 내 데이터가 "잘려서"(결과는 46.772247 대신에 72247로 시작했기 때문에) 사용 예제에서'.substr (4)'를 제거해야했다. – ceteras
흥미 롭습니다. 사용하고있는 MongoDB의 버전을 물어봐도 될까요? 위의 경우 2.1.0을 실행했습니다. 바이너리 데이터 "foo"를 삽입하고 JS 콘솔에서 바이너리 데이터를 선택하면,'hex()'메소드는'03000000666f6f'를 반환합니다. – jmikola
나는 1.8.2를 사용하고있다 – ceteras