2016-07-18 4 views
0

나는 MongodDB 컬렉션을 가지고있다. 3M 문서. 그러나 하나 이상의 문서에 JSON 호환 필드가 없으므로이를 JSON으로 내보낼 수 없습니다. docs는 BSON으로 저장되기 때문에 MongodDB에서는 괜찮습니다. 그러나 유스 케이스에서는 작동하지 않습니다.Mongodb DB - Json과 호환되지 않는 데이터로 문서 찾기

내 문서에 JSON과 호환되지 않는 데이터가 포함될 것으로 예상되지 않았습니다. JSON 정보가없는 문서는 어떻게 찾을 수 있습니까?

답변

0

당신과 함께 스크립트를 실행할 수 있습니다 : 당신은 mongoexport 도구를 찾고 될 수

Collection.forEach(function(item) { 
 
    try { 
 
    JSON.parse(item); 
 
    } 
 
    catch(err) { 
 
    db.NoJsonObject.save(item);} 
 
    } 
 
});

+0

좋은 시작이지만 작동하지 않습니다. 이 경우 모든 문서가 잘못된 것으로 나열됩니다. – rat

+0

@rat'ObjectId()'가 구문 분석에 실패 할 것이므로 그것들 모두를 유효하지 않은 것으로 나열합니다. 당신이'JSON.parse (JSON.stringify (item))'을한다면, 적어도 ObjectIds로 인해 실패한 것을 제거 할 것입니다. – cdbajorin

0

.

데이터를 "수정"하시겠습니까? 아니면 이전 JSON 판독기로 읽을 수있는 방식으로 데이터를 나타내시겠습니까?

큰 JSON 파일을 --jsonArray 스위치를 사용하여 출력으로 만들 수는 있지만 매우주의해야합니다. 당신의 독자는 내부 표현으로 당신에게 그것을주기 전에 모든 300 만 개의 문서를 읽으려고 할 것입니다.

스위치가 없으면 한 줄에 하나의 json 문서 만 생기므로이 작업을 수행하여 필요한 메모리를 줄일 수 있습니다. JSON을 가져올 수있는 일에 의해 출력 엄격한 JSON 표현 소모품에 파일을 것이다

while (read_line){ 
    load_json(line) 
    //do something with memory 
    free(json) 
} 

https://docs.mongodb.com/manual/reference/program/mongoexport/

mongoexport --db test --collection traffic --out traffic.json 

적절한 플래그.

+0

'fix'는 나쁜 단어 선택입니다. 그것은 깨진 것이 아닙니다 ... BSON이 이것을 완벽하게 지원하기 때문에. 하지만 내 문서에 JSON 이외의 데이터가 포함될 것으로 기대하지 않았으므로 잘못된 정보를 찾고 싶습니다. – rat

+0

@rat 아마 모든 문서에 _id : ((ObjectId)) 필드에 비 JSON 유형이 있습니다. 외부 도구에서 특정 오류가 발생 했습니까? –