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

问题描述 投票:0回答:2

我使用 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 usually since I use a SAX parser instead of DOM.

范围内
mongodb bson
2个回答
3
投票

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

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

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


0
投票

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

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

小心,因为这个命令修改文件,所以在副本上执行它

© www.soinside.com 2019 - 2024. All rights reserved.