MongoDB 컬렉션의 모든 레코드를 .csv
파일로 내보내는 방법은 무엇입니까?
mongoexport --host localhost --db dbname --collection name --type=csv > test.csv
내 보내야하는 필드의 이름을 지정하라는 메시지가 표시됩니다. 필드 이름을 지정하지 않고 모든 필드를 내보낼 수 있습니까?
답변:
@ 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
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에 전달할 수 있습니다.
원하는 경우 지정하지 않고 모든 컬렉션을 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;
mongoexport가 나를 위해 이것을 할 수 없었습니다. 모든 필드의 전체 목록을 얻으려면 전체 컬렉션을 한 번 반복해야합니다. 이것을 사용하여 헤더를 생성하십시오. 그런 다음 컬렉션을 다시 반복하여 각 문서에 대해 이러한 헤더를 채 웁니다.
이 작업을 수행하는 스크립트를 작성했습니다. 개별 문서 간의 스키마 차이에 관계없이 MongoDB 문서를 csv로 변환합니다.
또한 내부 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 형식이 손상됩니다.
--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>..."
이것은 나를 위해 일해보십시오
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을 추가합니다.
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
오류가있는 모든 사람들을 위해.
이에 대한 간략한 설명과 함께 해결책을 제시하겠습니다.
연결 명령 :-
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-> 모든 사용자 정보가 저장된 데이터베이스
mongoexport
따르면csv flag is deprecated; please use --type=csv instead