Монго: экспортировать все поля данных из коллекции без указания полей? - PullRequest
5 голосов
/ 21 января 2012
  • У меня более 100 полей, и я ищу способ, чтобы я мог просто экспортировать всю коллекцию в формате CSV

  • Командная строка просит предоставить все поля через

-f [--fields] арг разделенный запятыми список имен полей, например -f имя, возраст

  • есть ли способ получить всю коллекцию, например, используя dump, но не в формате bson?
  • Мне нужны данные CSV

Спасибо

Ответы [ 2 ]

12 голосов
/ 21 октября 2013

В bash вы можете создать этот «export-all-collections-to-csv.sh» и передать имя базы данных в качестве единственного аргумента (не стесняйтесь свести это к одной коллекции):

OIFS=$IFS;
IFS=",";

dbname=$1 #put "database name" here if you don't want to pass it as an argument

collections=`mongo $dbname --eval "rs.slaveOk();db.getCollectionNames();" --quiet`;
collectionArray=($collections);

for ((i=0; i<${#collectionArray[@]}; ++i));
do
    keys=`mongo $dbname --eval "rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.findOne()) { keys.push(key); }; keys;" --quiet`;
    mongoexport --db $dbname --collection ${collectionArray[$i]} --fields "$keys" --csv --out $dbname.${collectionArray[$i]}.csv;
done

IFS=$OIFS;
1 голос
/ 23 января 2012

Вы можете создать файл с именами полей (может быть проще для вас):

--fieldFile arg         file with fields names - 1 per line

В вашем случае все они могут быть одинаковыми, но причина, по которой вы должны указать имена полей, заключается в том, чтоони могут быть разными для каждого документа, однако имена полей в csv должны быть фиксированными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...