我使用bsondump将一个巨大的(69GB)文件导出到json。我希望得到一个有效的json数组,但不会分离对象。
可以使用mongoexport创建json数组。但是这个bson文件是从另一台机器导出的,由于尺寸和性能的考虑,我不想导入这个大文件,而是可以使用mongoexport从db中导出它。
如何使用bsondump导出有效的json数组?
修改
为了提供更多背景知识,我需要将基于bson的mongodb导出转换为json:
1)我试图使用mongoexport直接从mongodb导出json。就像这样:
mongoexport -d mydb -c notifications --jsonArray -o lv.json
这个问题是导出没有可用的进展,它的运行速度明显慢于mongodump(例如它在我不得不停止之前就没有完成)。我在生产服务器上施加了很大的压力。正如我在原始问题中所述,由于这个原因,它不是一种选择。
2)mongodump的工作方式更快,可能是因为它不必转换为json而只是转储内部数据。它也表现出了进步,所以我知道什么时候会结束。这是我唯一可以在生产服务器上运行的东西。
mongodump --db mydb
修改2
导出到.bson后,可以使用bsondump将.bson文件转换为.json文件:
bsondump mydata.bson > mydata.json
要明确这一点:bsondump没有像mongoexport这样的--jsonArray选项。因此它无法导出有效的json数组,而是将多个根对象转储到一个文件中。结果是一个无效的文档,必须预先解析。
/ EDIT2
3)我基本上有两个选择:将bson转储导入本地数据库,并使用mongoexport --jsonArray将其导出到正确的json文件。或者找到一种绕bsondump本身无法导出到正确的json数组文件的方法。第三个选项,在我的工具中实现了一个bson解析器,这是我并不真正热衷的事情......
大文件大小不是我工具的问题。我的工具是用C ++编写的,专门用于大数据流。我使用带有SAX解析器的rapidjson,并通过自己的类似SQL的求值程序过滤出记录。内存使用量在<通常因为我使用SAX解析器而不是DOM而使用10MB。
答案 0 :(得分:1)
回答我自己的问题:bsondump目前缺少创建json数组作为输出的选项(如mongoexport的--jsonArray选项)。我已经创建了一个功能请求[1],也许它会被添加到下一个版本的bsondump中。
与此同时,我为我的目的创建了一个小工具,它将我的数据转换为json数组。