[mongodb] mongo 쿼리의 출력을 csv 파일로 리디렉션

32 비트 Windows7 컴퓨터에 MongoDB 2.2.2를 사용하고 있습니다. .js 파일에 복잡한 집계 쿼리가 있습니다. 이 파일을 셸에서 실행하고 출력을 CSV 파일로 보내야합니다. 쿼리가 “플랫”json (중첩 키 없음)을 반환하므로 본질적으로 깔끔한 csv로 변환 할 수 있습니다. 및

에 대해 알고 있습니다. 전체 쿼리를 셸에 붙여넣고 스크립트 내부 에서만 허용 하지만 csv가 필요합니다. 그리고 두 번째 방법 : .. 화면에 출력을 인쇄하고 다시 json 형식으로 인쇄합니다.
Mongo가 json에서 csv로 변환하는 방법이 있습니까? (데이터 차트를 준비하려면 csv 파일이 필요합니다). 나는 다음과 같이 생각하고있다.
1. 어느 mongo는 내가 지금 찾을 수없는 내장 명령을 가지고있다.load()eval()eval()printjson()load()

2. Mongo는 나를 위해 그것을 할 수 없습니다. 기껏해야 json 출력을 파일로 보낼 수 있으며이 파일을 직접 csv로 변환해야합니다.
3. Mongo는 json 출력을 임시 컬렉션으로 보낼 수 있으며, 그 내용은 쉽게 mongoexportedcsv 형식으로 될 수 있습니다 . 하지만지도 축소 쿼리 만 출력 컬렉션을 지원한다고 생각합니다. 맞습니까? 집계 쿼리에 필요합니다.

도움을 주셔서 감사합니다 🙂



답변

나는이 질문이 오래되었다는 것을 알고 있지만 복잡한 쿼리를 csv로 내보내려고 한 시간을 보내고 내 생각을 공유하고 싶었습니다. 처음에는 csv 변환기에 대한 json을 사용할 수 없었습니다 ( 이것이 유망 해 보였지만). 내가 한 일은 mongo 스크립트에 csv 파일을 수동으로 작성하는 것이 었습니다.

이것은 간단한 버전이지만 본질적으로 내가 한 일입니다.

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

이것은 방금 쿼리를 stdout으로 파이프했습니다.

mongo test export.js > out.csv

test내가 사용하는 데이터베이스의 이름은 어디에 있습니까 ?


답변

Mongo의 내장 내보내기는 형식 날짜, 은밀한 데이터 유형 등과 같은 데이터 조작을 원하지 않는 한 잘 작동합니다.

다음 명령은 매력으로 작동합니다.

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


답변

다른 답변 확장 :

@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

하지만 mongo 쉘이 이러한 주석을 뱉어내는 것을 중지하고 --quiet플래그 를 전달하여 요청한 내용 만 인쇄하도록 할 수 있습니다.

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


답변

시도 할 수있는 작업은 다음과 같습니다.

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


답변

이것 좀 봐

mongo 쉘에서 파일로 출력하기 위해. mongos 셸에서 csv 출력을 지원하지 않습니다. 자바 스크립트를 직접 작성하거나 사용 가능한 많은 변환기 중 하나를 사용해야합니다. 예를 들어 Google은 “json을 csv로 변환”합니다.


답변

제가 사용해 왔던 멋진 솔루션으로 여기 무게를 재는 것뿐입니다. 이는 집계를 지원하지만 필드 이름을 하드 코딩 할 필요가 없다는 점에서 위 의 Lucky Soni 솔루션 과 유사 합니다.

cursor = db.<collection_name>.<my_query_with_aggregation>;

headerPrinted = false;
while (cursor.hasNext()) {
    item = cursor.next();

    if (!headerPrinted) {
        print(Object.keys(item).join(','));
        headerPrinted = true;
    }

    line = Object
        .keys(item)
        .map(function(prop) {
            return '"' + item[prop] + '"';
        })
        .join(',');
    print(line);
}

.js파일을 파일 로 저장하세요 .이 경우 에는 파일을 호출 example.js하고 다음과 같이 mongo 명령 줄로 실행합니다.

mongo <database_name> example.js --quiet > example.csv


답변