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

时间:2012-01-20 23:47:26

标签: mongodb

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

  • 命令行要求通过

  • 提供所有字段
  

-f [--fields] arg逗号分隔的字段名称列表,例如-F   姓名,年龄

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

谢谢

2 个答案:

答案 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中的字段名称必须是固定的。