从 bsondump 导出的 json 创建对象数组



我使用 bsondump 将一个巨大的 (69GB( 文件导出为 json。我希望得到一个有效的 json 数组,但对象没有分开。

有一个选项可以使用 mongoexport 创建 json 数组。但是这个bson文件是从另一台机器导出的,出于大小和性能考虑,我不想导入这个大文件,然后我可以使用mongoexport从数据库导出它。

如何使用 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 数组,而是将多个根对象转储到一个文件中。结果是一个无效的文档,必须预先解析。

/编辑2

3(我基本上有两个选择:将bson转储导入本地数据库,并使用mongoexport --jsonArray将其导出到适当的json文件中。或者找到一种方法来解决 bsondump 本身无法导出到正确的 json 数组文件。第三个选项,在我的工具中实现 bson 解析器,是我不太热衷的东西......

大文件大小对我的工具来说不是问题。我的工具是用C++编写的,专门用于大型数据流。我将 rapidjson 与 SAX 解析器一起使用,并通过自己的类似 SQL 的评估器过滤掉记录。内存使用量通常在 10MB <范围内,因为我使用>

回答我自己的问题:bsondump 目前缺少创建 json 数组作为输出的选项(如 mongoexport 的 --jsonArray 选项(。我已经创建了一个功能请求 [1],也许它将被添加到下一个版本的 bsondump 中。

同时,我为我的目的创建了一个小工具,可以将我的数据转换为 json 数组。

[1] https://jira.mongodb.org/browse/TOOLS-1734

我使用这个 linux 命令将无效的 json 转换为有效的 json:

sed -i -e '1s/^/[/' -e ':a;N;$!ba;s/n/,/g' -e '$s/$/]/' dump.json

小心,因为此命令会修改文件,因此请通过副本执行它

最新更新