복붙노트

[MONGODB] CSV 파일로 몽고 쿼리의 리디렉션 출력

MONGODB

CSV 파일로 몽고 쿼리의 리디렉션 출력

나는 32 비트 Windows7의 기계에 대한 MongoDB의 2.2.2을 사용하고 있습니다. 난은 .js 파일의 복잡한 집계 쿼리가 있습니다. 나는 쉘에서이 파일을 실행하고 CSV 파일로 출력을해야합니다. 이 깔끔한 CSV로 본질적으로 전환 그래서 나는 쿼리는 "평면"JSON (NO 중첩 된 키를) 반환 있는지 확인합니다. 내가 부하 ()과 평가에 대해 알고 (). 내가 CSV 필요 동안 평가는 (), 쉘에 전체 쿼리를 붙여 저를 필요로하고 스크립트 내부에만 printjson () 할 수 있습니다. 그리고, 두번째 방식 : 하중 () ...는 JSON 형식 다시 화면 출력을 출력하고. 몽고는 JSON에서 CSV로이 변환을 할 수있는 방법이 있나요? (필자는 데이터를 차트를 준비하는 CSV 파일이 필요합니다). 내가 생각하고: 1. 하나의 몽고가 내장 내가 지금 찾을 수 없습니다 이에 대한 명령. 2. 몽고는 나를 위해 그것을 할 수 없다; 나는 기껏 그때 자신을 CSV로 변환 할 필요가 파일로 JSON 출력을 보낼 수 있습니다. 3. 몽고 임시 컬렉션에 JSON 출력을 보낼 수의 내용을 쉽게 CSV 형식으로 mongoexported 할 수 있습니다. 그러나 나는 단지지도-감소 쿼리 출력 모음을 지원 생각합니다. 맞나요? 나는 집계 쿼리를 위해 필요합니다.

어떤 도움을 주셔서 감사합니다 :)

해결법

  1. ==============================

    1.이 질문은 오래 알고 있지만 나는 CSV로 복잡한 쿼리를 내보내려고 시간을 보내고 난 내 생각을 공유하고 싶었다. (이 하나가 약속 보였다 있지만) 우선 작업에 CSV 변환기에 JSON 중 하나를 가져올 수 없습니다. 나는 수동으로 몽고 스크립트에서 CSV 파일을 작성하고 일을 결국 무엇인가.

    이 질문은 오래 알고 있지만 나는 CSV로 복잡한 쿼리를 내보내려고 시간을 보내고 난 내 생각을 공유하고 싶었다. (이 하나가 약속 보였다 있지만) 우선 작업에 CSV 변환기에 JSON 중 하나를 가져올 수 없습니다. 나는 수동으로 몽고 스크립트에서 CSV 파일을 작성하고 일을 결국 무엇인가.

    이것은 간단한 버전입니다하지만 난 한 본질적으로 무엇을 :

    print("name,id,email");
    db.User.find().forEach(function(user){
      print(user.name+","+user._id.valueOf()+","+user.email);
    });
    

    이 난 그냥 표준 출력으로 쿼리를 파이프

    mongo test export.js > out.csv
    

    여기서 테스트는 데이터베이스 I 사용의 이름입니다.

  2. ==============================

    2.수출이 잘 작동되는 내장 당신이 등 형식으로 날짜, 비밀 데이터 유형과 같은 데이터 조작하려는 경우가 아니면 몽고는이다

    수출이 잘 작동되는 내장 당신이 등 형식으로 날짜, 비밀 데이터 유형과 같은 데이터 조작하려는 경우가 아니면 몽고는이다

    명령을 따르는 것은 매력으로 작동합니다.

        mongoexport -h localhost -d databse -c collection --type=csv 
        --fields erpNum,orderId,time,status 
        -q '{"time":{"$gt":1438275600000}, "status":{"$ne" :"Cancelled"}}' 
        --out report.csv
    
  3. ==============================

    3.여기에 당신이 시도 할 것입니다 :

    여기에 당신이 시도 할 것입니다 :

    print("id,name,startDate")
    cursor = db.<collection_name>.find();
    while (cursor.hasNext()) {
        jsonObject = cursor.next();
        print(jsonObject._id.valueOf() + "," + jsonObject.name + ",\"" + jsonObject.stateDate.toUTCString() +"\"")
    
    }
    

    그 파일에 저장에서 "export.js"을 말한다. 다음 명령을 실행합니다 :

    mongo <host>/<dbname> -u <username> -p <password> export.js > out.csv
    
  4. ==============================

    4.다른 답변을 확장 :

    다른 답변을 확장 :

    나는 GEverding의 대답 가장 유연한 @ 발견했다. 또한 집계와 함께 작동합니다 :

    test_db.js

    print("name,email");
    
    db.users.aggregate([
        { $match: {} }
    ]).forEach(function(user) {
            print(user.name+","+user.email);
        }
    });
    

    수출 결과에 다음 명령을 실행합니다 :

    mongo test_db < ./test_db.js >> ./test_db.csv
    

    불행하게도, 우리가 그것을 사용하기 전에 파일 처리를 필요로하는 CSV 파일에 추가 텍스트를 추가합니다 :

    MongoDB shell version: 3.2.10 
    connecting to: test_db
    

    그러나 우리는 그 의견에서 몽고 쉘 정지 침을 만 --quiet 플래그를 전달하여 우리가 요구 한 내용을 인쇄 할 수 있습니다

    mongo --quiet test_db < ./test_db.js >> ./test_db.csv
    
  5. ==============================

    5.에서보세요 이

    에서보세요 이

    몽고에서하고 출력하기위한 파일에 쉘. mongos는 쉘에서 CSV를하고 출력하기위한 지원되지 않습니다. 당신은 자바 스크립트를 직접 작성하거나 사용할 수있는 많은 변환기 중 하나를 사용해야합니다. 구글 예를 들어 "CSV로 변환 JSON".

  6. from https://stackoverflow.com/questions/14478304/redirect-output-of-mongo-query-to-a-csv-file by cc-by-sa and MIT license