我有超过100个字段,我正在寻找一种方法,以便我可以将整个集合导出为CSV格式
命令行要求通过
-f [--fields] arg逗号分隔的字段名称列表,例如-F 姓名,年龄
谢谢
答案 0 :(得分:11)
在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 :(得分:1)
您可以使用字段名称创建一个文件(对您来说可能更容易):
--fieldFile arg file with fields names - 1 per line
在您的情况下,它们可能都是相同的,但您必须指定字段名称的原因是因为它们可能对于每个文档都不同,但csv中的字段名称必须是固定的。