@ 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
сказаноcsv flag is deprecated; please use --type=csv instead
Кроме того, нельзя использовать пробелы между именами полей, разделенных запятыми.
ПЛОХОЙ:
-f firstname, lastname
ХОРОШИЙ:
-f firstname,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 независимо от различий в схемах отдельных документов.
https://github.com/surya-shodan/mongoexportcsv
источник
Также, если вы хотите экспортировать внутренние поля json, используйте точку (оператор.).
Запись JSON:
{ "_id" : "00118685076F2C77", "value" : { "userIds" : [ "u1" ], "deviceId" : "dev" }
Команда mongoexport с оператором точки (с использованием mongo версии 3.4.7):
Выходной CSV:
value.deviceId,value.userIds d1,"[""u1""]" d2,"[""u2""]"
Примечание. Убедитесь, что вы не экспортируете массив. Это повредит формат CSV, такой как поля userIds, показанные выше
источник
Решение для пользователей 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>..."
источник
Это работает для меня Попробуйте
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
источник
Для всех, кто застрял с ошибкой.
Позвольте мне дать вам решение с кратким объяснением того же: -
команда для подключения: -
--host -> хост сервера Mongo
--port -> порт сервера Mongo
-u -> имя пользователя
-p -> пароль
--db -> db, из которого вы хотите экспортировать
--collection -> коллекция, которую вы хотите экспортировать
--type -> тип экспорта в моем случае CSV
--out -> имя файла, в который вы хотите экспортировать
--fields -> все поля, которые вы хотите экспортировать (не ставьте пробелы между двумя именами полей между запятыми в случае CSV)
--authenticationDatabase -> база данных, в которой хранится вся ваша пользовательская информация
источник
Команда ниже используется для экспорта коллекции в формат CSV.
Примечание:
naag
это база данных,employee1_json
это коллекция.источник