MongoDB에서 컬렉션을 CSV로 내보내는 방법은 무엇입니까?


100

MongoDB 컬렉션의 모든 레코드를 .csv파일로 내보내는 방법은 무엇입니까?

mongoexport --host localhost --db dbname --collection name --type=csv > test.csv

내 보내야하는 필드의 이름을 지정하라는 메시지가 표시됩니다. 필드 이름을 지정하지 않고 모든 필드를 내보낼 수 있습니까?

답변:


114

@ karoly-horvath가 맞습니다. CSV에는 입력란이 필요합니다.

MongoDB 문제 추적기 https://jira.mongodb.org/browse/SERVER-4224 의이 버그에 따르면 csv로 내보낼 때 필드를 제공해야합니다 . 문서가 명확하지 않습니다. 그것이 오류의 이유입니다.

이 시도:

mongoexport --host localhost --db dbname --collection name --csv --out text.csv --fields firstName,middleName,lastName

최신 정보:

이 커밋 : https://github.com/mongodb/mongo-tools/commit/586c00ef09c32c77907bd20d722049ed23065398 은 3.0.0-rc10 이상의 문서를 수정합니다. 바뀐다

Fields string `long:"fields" short:"f" description:"comma separated list of field names, e.g. -f name,age"`

Fields string `long:"fields" short:"f" description:"comma separated list of field names (required for exporting CSV) e.g. -f \"name,age\" "`

버전 3.0 이상 :

더 이상 사용되지 않으므로 대신를 사용해야 --type=csv합니다 --csv.

자세한 내용 : https://docs.mongodb.com/manual/reference/program/mongoexport/#export-in-csv-format

전체 명령 :

mongoexport --host localhost --db dbname --collection name --type=csv --out text.csv --fields firstName,middleName,lastName

16
버전 3.0.6에 mongoexport따르면csv flag is deprecated; please use --type=csv instead
Roman Dibikhin 2015 년

VERSION 3.0 이상 편집에 대해 (익명에게) 감사합니다.
campeterson

4
각각의 이름을 지정하는 대신 모든 필드를 포함하는 빠른 방법이 있습니까?
Kevz

53

또한 쉼표로 구분 된 필드 이름 사이에 공백이 허용되지 않습니다.

나쁜: -f firstname, lastname

좋은: -f firstname,lastname


28
mongoexport  --help
....
-f [ --fields ] arg     comma separated list of field names e.g. -f name,age
--fieldFile arg         file with fields names - 1 per line

수동으로 지정해야하며 생각해 보면 완벽합니다. MongoDB는 스키마가 없습니다. 반면 CSV는 열 레이아웃이 고정되어 있습니다. 다른 문서에서 사용되는 필드를 알지 못하면 CSV 덤프를 출력 할 수 없습니다.

고정 된 스키마가있는 경우 하나의 문서를 검색하고 스크립트로 필드 이름을 수집하여 mongoexport에 전달할 수 있습니다.


1
a 레코드에서 필드 목록을 가져올 수 있는지 검색 중이었습니다. 즉, db.collection.finOne (). getFields ()에서. 하지만 이것이 올바른 방법 (getFields)이 아니라고 생각합니다. getKeys ()도 시도했습니다. 그렇지 않으면 키 : 값 해시로 레코드를 가져와야합니다.
Stha 성공

나는 똑같은 일을하려고 노력하고 있지만 왜 csv 파일을 제대로 가져 오지 않는지 알아 내려고합니다. 제 경우에는 자체적으로 "발명 한"필드를 포함하여 자체에 대한 모든 것을 알려줄 필요가 있습니다. 따라서 제 경우에는 필드를 지정해야하는 것이 완벽하지 않습니다. 필드가 모두 무엇인지 모르기 때문입니다!
Stephen

밭 수확 대본 앞면에 나는 이것을 1 년 정도 전에 게시 했는데, 몇 가지 아이디어를 줄 수있을 것입니다.
arober11

9

원하는 경우 지정하지 않고 모든 컬렉션을 csv로 내보낼 수 있습니다 --fields(모든 필드를 내보냄).

에서 http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/은 이 bash는 스크립트를 실행

OIFS=$IFS;
IFS=",";

# fill in your details here
dbname=DBNAME
user=USERNAME
pass=PASSWORD
host=HOSTNAME:PORT

# first get all collections in the database
collections=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();db.getCollectionNames();"`;
collections=`mongo $dbname --eval "rs.slaveOk();db.getCollectionNames();"`;
collectionArray=($collections);

# for each collection
for ((i=0; i<${#collectionArray[@]}; ++i));
do
    echo 'exporting collection' ${collectionArray[$i]}
    # get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys
    keys=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`;
    # now use mongoexport with the set of keys to export the collection to csv
    mongoexport --host $host -u $user -p $pass -d $dbname -c ${collectionArray[$i]} --fields "$keys" --csv --out $dbname.${collectionArray[$i]}.csv;
done

IFS=$OIFS;

4
위 스크립트의 유일한 문제는 각 컬렉션의 첫 번째 문서에 해당 컬렉션의 문서에 나타날 수있는 모든 가능한 키가 포함되어 있다고 가정한다는 것입니다. 문서 유형이 배열 또는 중첩 된 하위 문서를 포함 할 수있는 경우에는 해당되지 않을 수 있습니다.
arober11

@ arober11 당신 말이 맞습니다,이 중요한 사실을 언급하는 것을 잊었습니다. 내가 일반적으로하는 일은 모든 키를 주기적으로 수집하고 모든 키를 가져 오는 데 사용 하는 맵 축소 스크립트 를 실행하는 것입니다
Michael

3

mongoexport가 나를 위해 이것을 할 수 없었습니다. 모든 필드의 전체 목록을 얻으려면 전체 컬렉션을 한 번 반복해야합니다. 이것을 사용하여 헤더를 생성하십시오. 그런 다음 컬렉션을 다시 반복하여 각 문서에 대해 이러한 헤더를 채 웁니다.

이 작업을 수행하는 스크립트를 작성했습니다. 개별 문서 간의 스키마 차이에 관계없이 MongoDB 문서를 csv로 변환합니다.

https://github.com/surya-shodan/mongoexportcsv


2

또한 내부 json 필드를 내보내려면 점 (. 연산자)을 사용하십시오.

JSON 레코드 :

{
    "_id" : "00118685076F2C77",
    "value" : {
        "userIds" : [ 
            "u1"
        ],
        "deviceId" : "dev"
}

도트 연산자가있는 mongoexport 명령 (mongo 버전 3.4.7 사용) :

./mongoexport --host localhost --db myDB --collection myColl --type = csv --out out.csv --fields value.deviceId, value.userIds

출력 csv :

value.deviceId,value.userIds
d1,"[""u1""]"
d2,"[""u2""]"

참고 : 어레이를 내 보내지 마십시오. 위에 표시된 userId 필드와 같은 CSV 형식이 손상됩니다.


0

MongoDB Atlas 사용자를위한 솔루션!

--fields매개 변수를 큰 따옴표로 묶인 쉼표로 구분 된 필드 이름으로 추가 합니다.

--fields "<FIELD 1>,<FIELD 2>..."

이것은 완전한 예입니다.

mongoexport --host Cluster0-shard-0/shard1URL.mongodb.net:27017,shard2URL.mongodb.net:27017,shard3URL.mongodb.net:27017 --ssl --username <USERNAME> --password <PASSWORD> --authenticationDatabase admin --db <DB NAME> --collection <COLLECTION NAME> --type <OUTPUT FILE TYPE> --out <OUTPUT FILE NAME> --fields "<FIELD 1>,<FIELD 2>..."

0

이것은 나를 위해 일해보십시오

mongoexport --host cluster0-shard-dummy-link.mongodb.net:27017 --db yourdbname --forceTableScan   --collection users --type json --out /var/www/html/user.json --authenticationDatabase admin --ssl --username Yourusername --password Yourpassword

위 cmd는 필터 필드를 원할 경우 사용자 컬렉션의 전체 데이터를 반환 한 다음 --fields = email, name을 추가합니다.


아래 답변과 어떻게 다른가요?
Daniel W.

mongodump --host cluster0-shard.mongodb.net:27017 --db dbname --forceTableScan --out / var / www / html / documents / db-12-2020 --authenticationDatabase admin --ssl --username youruname- password yourpassword 시도해 볼 수도 있습니다. 이것은 전체 컬렉션을 제공합니다.
manoj patel

0

mongo : 4.2.6을 사용하여 도커 컨테이너로 원격으로 작동합니다.

mongoexport -h mongodb:27017 --authenticationDatabase=admin -u username -p password -d database -c collection -q {"created_date": { "$gte": { "$date": "2020-08-03T00:00:00.000Z" }, "$lt": { "$date": "2020-08-09T23:59:59.999Z" } } } --fields=somefield1,somefield2 --type=csv --out=/archive.csv

-1

오류가있는 모든 사람들을 위해.

이에 대한 간략한 설명과 함께 해결책을 제시하겠습니다.

연결 명령 :-

mongoexport --host your_host --port your_port -u your_username -p your_password --db your_db --collection your_collection --type=csv --out file_name.csv --fields all_the_fields --authenticationDatabase admin

--host-> Mongo 서버의 호스트

--port-> Mongo 서버의 포트

-u-> 사용자 이름

-p-> 비밀번호

--db-> 내보내려는 db

--collection-> 내보내려는 컬렉션

--type-> 내 경우 CSV의 내보내기 유형

--out-> 내보낼 파일 이름

--fields-> 내보낼 모든 필드 (CSV의 경우 쉼표 사이에 두 필드 이름 사이에 공백을 두지 마십시오)

--authenticationDatabase-> 모든 사용자 정보가 저장된 데이터베이스


-2

컬렉션을 CSV 형식으로 내보내는 데 사용되는 아래 명령입니다.

참고 : naag데이터베이스, employee1_json컬렉션입니다.

mongoexport --db naag--collection employee1_json --type csv --out /home/orienit/work/mongodb/employee1_csv_op1

이것은 mongodb 4 반환 : 실패 : CSV 모드는 필드 목록이 필요합니다
FRIDDAY
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.