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

Create array of objects from bsondump exported 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 数组,而是将多个根对象转储到一个文件中。结果是一个无效文档,必须对其进行预解析。

/Edit2

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

大文件不是我的工具的问题。我的工具是用 C++ 编写的,专门用于大数据流。我将 rapidjson 与引擎盖下的 SAX 解析器一起使用,并通过自己的 SQL-like 求值器过滤掉记录。内存使用量通常在 < 10MB 左右,因为我使用 SAX 解析器而不是 DOM。

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

与此同时,我创建了一个小工具用于将我的数据转换为 json 数组。

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