Mongoexport 到多个 csv 文件

Mongoexport to multiple csv files

我有一个大mongoDBcollection。我想将这个 collection 导出为 CSV,以便我可以将其导入统计包中以进行数据分析。

collection 中有大约 15 GB 的文档。我想将 collection 拆分为 ~100 个大小相同的 CSV 文件。有什么办法可以使用 mongoexport 实现这一目标吗?我也可以在 pymongo 中查询整个 collection,拆分它并手动写入 csv 文件,但我想这会更慢并且需要更多编码。

感谢您的意见。

您可以使用 --skip--limit 选项。

例如,如果您的集合包含 1,000 个文档,您可以使用脚本循环(伪代码)来完成:

loops = 100
count = db.collection.count()
batch_size = count / loops

for (i = 0; i < loops; i++) {
    mongoexport --skip (batch_size * i) --limit batch_size --out export${i}.json ...
} 

考虑到您的文档大小大致相等。

但是请注意,大的跳过速度很慢。

下限迭代将比上限迭代快。

以上循环的更好版本,它并行执行所有操作,因为你和我一样是个没有耐心的 sonnofabitch:

假设我们有 385892079 条记录,将其除以 100。

let bs=3858920 for i in {1..100} do let bsi=${bs}*$i mongoexport --db dbnamehere --collection collectionNamehere --port 3303\ --fields="f1,f2,f3" \ --out /opt/path/to/output/dir/dump.${i}.json -v \ --skip ${bsi} --limit ${bs} done

#total=335584
limit=20974;
skip=0;
for i in {1..16}; do mongoexport --host localhost --db tweets --collection mycollection --type=csv --fields tweet_id,user_name,user_id,text --out master_new/mongo_rec_${i}.csv -v --skip ${skip} --limit ${limit} --quiet; let skip=$((skip+limit)); done