如何在MongoDB中将集合导出为CSV?

如何将MongoDB集合中的所有logging导出到.csv文件?

 mongoexport --host localhost --db dbname --collection name --type=csv > test.csv 

这要求我指定我需要导出的字段的名称。 我可以只输出所有的字段,而不指定字段的名称?

@ karoly-horvath是对的。 csv需要字段。

根据MongoDB问题跟踪器https://jira.mongodb.org/browse/SERVER-4224中的这个错误,; 你必须在导出到csv时提供这些字段 。 文档不清楚。 这是错误的原因。

尝试这个:

 mongoexport --host localhost --db dbname --collection name --csv --out text.csv --fields firstName,middleName,lastName 

更新:

这个提交: https : //github.com/mongodb/mongo-tools/commit/586c00ef09c32c77907bd20d722049ed23065398修复了3.0.0-rc10和更高版本的文档。 它改变

 Fields string `long:"fields" short:"f" description:"comma separated list of field names, eg -f name,age"` 

 Fields string `long:"fields" short:"f" description:"comma separated list of field names (required for exporting CSV) eg -f \"name,age\" "` 

另外,逗号分隔的字段名称之间不允许有空格。

坏的: -f firstname, lastname

好的: -f firstname,lastname

 mongoexport --help .... -f [ --fields ] arg comma separated list of field names eg -f name,age --fieldFile arg file with fields names - 1 per line 

你必须手动指定它,如果你考虑它,这是非常有意义的。 MongoDB是无模式的; 另一方面,CSV具有固定的栏目布局。 不知道在不同文档中使用了哪些字段,不可能输出CSV转储。

如果你有一个固定的模式,也许你可以检索一个文件,用脚本从它收集字段名称,并将其传递给mongoexport。

如果你愿意,你可以将所有集合导出到csv,而无需指定--fields (将导出所有字段)。

http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/运行这个bash脚本;

 OIFS=$IFS; IFS=","; # fill in your details here dbname=DBNAME user=USERNAME pass=PASSWORD host=HOSTNAME:PORT # first get all collections in the database collections=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();db.getCollectionNames();"`; collections=`mongo $dbname --eval "rs.slaveOk();db.getCollectionNames();"`; collectionArray=($collections); # for each collection for ((i=0; i<${#collectionArray[@]}; ++i)); do echo 'exporting collection' ${collectionArray[$i]} # get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys keys=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`; # now use mongoexport with the set of keys to export the collection to csv mongoexport --host $host -u $user -p $pass -d $dbname -c ${collectionArray[$i]} --fields "$keys" --csv --out $dbname.${collectionArray[$i]}.csv; done IFS=$OIFS; 

我不能让mongoexport为我做这个。 我发现,要获得所有字段的详尽列表,您需要遍历整个集合一次。 用这个来生成头文件。 然后再次通过集合来为每个文档填充这些头文件。

我已经写了一个脚本来做到这一点。 将MongoDB文档转换为csv,而不考虑单个文档之间的模式差异。

https://github.com/surya-shodan/mongoexportcsv

另外,如果你想导出内部JSON字段使用点(。运营商)。

JSONlogging:

 { "_id" : "00118685076F2C77", "value" : { "userIds" : [ "u1" ], "deviceId" : "dev" } 

带点运算符的mongoexport命令(使用mongo版本3.4.7):

./mongoexport –host localhost –db myDB –collection myColl –type = csv –out out.csv –fields value.deviceId,value.userIds

输出csv:

 value.deviceId,value.userIds d1,"[""u1""]" d2,"[""u2""]" 

注意:确保不要导出数组。 它会像上面显示的字段userIds一样破坏CSV格式