2017-05-16 3 views
0

나는 'CRM'이라는 mongoddb DB를 가지고 있으며 컬렉션에는 "users"가 있습니다.mongodb 컬렉션의 각 문서를 별도의 json 파일로 내 보냅니다.

"사용자"컬렉션에는 50,000 명이 넘는 사용자가 있습니다.

"사용자"컬렉션의 모든 사용자 문서를 .json 파일로 내보내려고합니다.

모든 사용자에게 단일 (users.json) json 파일을 json 개체의 배열로 제공하는 다음 명령을 실행했습니다.

mongoexport -d CRM -c users -o users.json --jsonArray 

그러나 각 사용자에 대해 .JSON 파일을 원합니다.

도움이된다면 크게 도움이 될 것입니다.

+0

MongoDB에서 그렇게 할 방법이 없습니다. 배열의 모든 문서를 읽고 파일을 만드는 스크립트를 작성해야합니다. – bappr

+0

50000 개 이상의 문서를 배열에로드 한 다음 하나씩 파일에 데이터를 쓸 수 있습니까? – user54858

+0

예. mongoexport가 50K 문서의 내보내기를 수행하면 스크립트에서 파일을 읽습니다. 하지만 제 생각에는 컬렉션을 읽고 각 문서에 대한 파일을 만드는 스크립트를 만드는 것이 더 낫다는 것입니다. 확장 할 수 있다면 성능이 향상 될 것입니다. – bappr

답변

0

jq이 작업을 도와주었습니다.

Mongo의 출력 파일은 유효한 JSON 파일이 아니라 유효한 JSON 내용의 개별 행입니다. 내가 사용하는 단계는 있었다 : 각 라인을 통해 반복

  • ,
  • ID를 얻기 위해 구문 분석
  • 가 쓰기 파일 이름으로 ID를 사용 (당신은 여기에 자신의 필드를 사용할 수 있습니다)

    # Make newlines the only separator. 
    IFS=$'\n' 
    # Disable globbing. 
    set -f   
    
    # Iterate through the export file 
    for doc in $(cat < export.txt); do 
        # $doc is a valid JSON document. Parse it to get the filename 
        # based on the ID. 
        export filename=`echo $doc | jq -r '._id'`.json 
    
        # Write document to file. 
        echo "Writing $filename" 
        echo $doc > $filename 
    done 
    
    : 파일 여기

에 라인/문서는 내가 궁극적으로 사용되는 bash는 코드입니다

나는이 스택 교환 답변에서이 배운 :

나는이 50, 000의 기록을 위해 작동 얼마나 잘 단지 모르겠어요.