@ karoly-horvath ma rację. Pola są wymagane dla CSV.
Zgodnie z tym błędem w narzędziu do śledzenia problemów MongoDB https://jira.mongodb.org/browse/SERVER-4224 MUSISZ podać pola podczas eksportowania do pliku csv . Dokumentacja nie jest w tym jasna. To jest powód błędu.
Spróbuj tego:
mongoexport --host localhost --db dbname --collection name --csv --out text.csv --fields firstName,middleName,lastName
AKTUALIZACJA:
To zatwierdzenie: https://github.com/mongodb/mongo-tools/commit/586c00ef09c32c77907bd20d722049ed23065398 naprawia dokumenty w wersji 3.0.0-rc10 i nowszych. To się zmienia
Fields string `long:"fields" short:"f" description:"comma separated list of field names, e.g. -f name,age"`
do
Fields string `long:"fields" short:"f" description:"comma separated list of field names (required for exporting CSV) e.g. -f \"name,age\" "`
WERSJA 3.0 I POWYŻSZE:
Należy używać --type=csv
zamiast, --csv
ponieważ został wycofany.
Więcej szczegółów: https://docs.mongodb.com/manual/reference/program/mongoexport/#export-in-csv-format
Pełne polecenie:
mongoexport --host localhost --db dbname --collection name --type=csv --out text.csv --fields firstName,middleName,lastName
mongoexport
mówicsv flag is deprecated; please use --type=csv instead
Ponadto nie wolno używać spacji między nazwami pól oddzielonymi przecinkami.
ZŁY:
-f firstname, lastname
DOBRY:
-f firstname,lastname
źródło
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
Musisz to ręcznie określić i jeśli się nad tym zastanowisz, ma to sens. MongoDB nie ma schematów; Z drugiej strony CSV ma stały układ kolumn. Nie wiedząc, jakie pola są używane w różnych dokumentach, niemożliwe jest wyprowadzenie zrzutu CSV.
Jeśli masz ustalony schemat, być może mógłbyś pobrać jeden dokument, zebrać z niego nazwy pól za pomocą skryptu i przekazać go do mongoexport.
źródło
Jeśli chcesz, możesz wyeksportować wszystkie kolekcje do csv bez określania
--fields
(wyeksportuje wszystkie pola).Z http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/ uruchom ten skrypt 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;
źródło
Nie mogłem zmusić mongoeksportu do zrobienia tego za mnie. Odkryłem, że aby uzyskać wyczerpującą listę wszystkich pól, musisz raz przejrzeć całą kolekcję. Użyj tego do wygenerowania nagłówków. Następnie ponownie przejrzyj kolekcję, aby wypełnić te nagłówki dla każdego dokumentu.
Napisałem skrypt, aby to zrobić. Konwertowanie dokumentów MongoDB na csv niezależnie od różnic w schematach między poszczególnymi dokumentami.
https://github.com/surya-shodan/mongoexportcsv
źródło
Również jeśli chcesz wyeksportować wewnętrzne pola json, użyj kropki (operator.).
Rekord JSON:
{ "_id" : "00118685076F2C77", "value" : { "userIds" : [ "u1" ], "deviceId" : "dev" }
polecenie mongoexport z operatorem kropki (przy użyciu mongo w wersji 3.4.7):
Wyjście CSV:
value.deviceId,value.userIds d1,"[""u1""]" d2,"[""u2""]"
Uwaga: upewnij się, że nie eksportujesz tablicy. Spowodowałoby to uszkodzenie formatu CSV, takiego jak pola userIds pokazane powyżej
źródło
Rozwiązanie dla użytkowników MongoDB Atlas!
Dodaj
--fields
parametr jako nazwy pól oddzielone przecinkami ujęte w podwójne cudzysłowy:--fields "<FIELD 1>,<FIELD 2>..."
Oto kompletny przykład:
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>..."
źródło
To działa dla mnie Spróbuj
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
Powyżej cmd zwróć całe dane kolekcji użytkowników, jeśli chcesz użyć pola filtru, a następnie dodaj --fields = email, name
źródło
działa dla mnie zdalnie do kontenera docker z 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
źródło
Dla wszystkich, którzy utknęli w błędzie.
Pozwólcie, że przedstawię wam rozwiązanie z krótkim wyjaśnieniem tego samego: -
polecenie połączenia: -
--host -> host serwera Mongo
--port -> port serwera Mongo
-u -> nazwa użytkownika
-p -> hasło
--db -> db, z którego chcesz eksportować
--collection -> kolekcja, którą chcesz wyeksportować
--type -> typ eksportu w moim przypadku CSV
--out -> nazwa pliku, do którego chcesz wyeksportować
--fields -> wszystkie pola, które chcesz wyeksportować (nie wstawiaj spacji między dwoma nazwami pól między przecinkami w przypadku CSV)
--authenticationDatabase -> baza danych, w której przechowywane są wszystkie informacje o użytkowniku
źródło
Poniższe polecenie służy do eksportowania kolekcji do formatu CSV.
Uwaga:
naag
to baza danych,employee1_json
to zbiór.źródło