【问题标题】:Mongo: export all fields data from collection without specifying fields?Mongo:从集合中导出所有字段数据而不指定字段?
【发布时间】:2013-10-21 20:30:37
【问题描述】:
  • 我有 100 多个字段,我正在寻找一种方法,以便将整个集合导出为 CSV 格式

  • 命令行要求通过

  • 提供所有字段

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

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

谢谢

【问题讨论】:

  • mongodb 没有用于 CSV 转储的导出命令?即使是现在,2015 年?

标签: mongodb


【解决方案1】:

在 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;

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多