Mongo:从集合中导出所有字段数据而不指定字段?

day*_*mer 7 mongodb

  • 我有超过100个字段,我正在寻找一种方法,以便我可以将整个集合导出为CSV格式

  • 命令行要求通过提供所有字段

-f [--fields] arg逗号分隔的字段名称列表,例如-f name,age

  • 有没有办法让整个集合像使用转储但不是以bson格式?
  • 我需要CSV数据

谢谢

fab*_*ert 13

在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;
Run Code Online (Sandbox Code Playgroud)


Tyl*_*ock 2

您可以创建一个包含字段名称的文件(对您来说可能更容易):

--fieldFile arg         file with fields names - 1 per line
Run Code Online (Sandbox Code Playgroud)

在您的情况下,它们可能都是相同的,但您必须指定字段名称的原因是因为每个文档的字段名称可能不同,但 csv 中的字段名称必须固定。