Как экспортировать коллекцию в CSV в MongoDB? - PullRequest
82 голосов
/ 25 июля 2011

Как экспортировать все записи из коллекции MongoDB в файл .csv?

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

В этом окне предлагается указать имена полей, которые необходимо экспортировать.Могу ли я просто экспортировать все поля без указания названий полей?

Ответы [ 7 ]

89 голосов
/ 08 ноября 2012

@ Кароли-Хорват это правильно.Поля обязательны для 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
50 голосов
/ 26 января 2013

Кроме того, вам не разрешены пробелы между именами полей через запятую.

BAD: -f firstname, lastname

GOOD: -f firstname,lastname

26 голосов
/ 25 июля 2011
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.

9 голосов
/ 01 января 2014

Если вы хотите, вы можете экспортировать все коллекции в 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;
3 голосов
/ 12 июля 2015

Я не смог заставить mongoexport сделать это для меня.Я обнаружил, что, чтобы получить исчерпывающий список всех полей, вам нужно один раз просмотреть всю коллекцию.Используйте это для генерации заголовков.Затем выполните цикл по коллекции снова, чтобы заполнить эти заголовки для каждого документа.

Я написал скрипт для этого.Преобразование документов MongoDB в csv независимо от различий схемы между отдельными документами.

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

0 голосов
/ 08 февраля 2018

Команда ниже используется для экспорта коллекции в формат CSV.

Примечание: naag - это база данных, employee1_json - это коллекция.

mongoexport --db naag--collection employee1_json --type csv --out /home/orienit/work/mongodb/employee1_csv_op1
0 голосов
/ 09 сентября 2017

Также, если вы хотите экспортировать внутренние поля json, используйте точку (. Оператор).

JSON запись:

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

Команда mongoexport с оператором точки (с использованием версии 3.4.7 mongo):

. / 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""]"

Примечание: убедитесь, что вы не экспортируете массив. Это повредит формат CSV, такой как полевые идентификаторы пользователей, показанные выше

...