【问题标题】:Create array of objects from bsondump exported json从 bsondump 导出的 json 创建对象数组
【发布时间】:2017-07-18 00:36:27
【问题描述】:

我使用 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 的评估器过滤掉记录。由于我使用的是 SAX 解析器而不是 DOM,因此内存使用量通常在

【问题讨论】:

  • 您可能会从数据库中删除mongodump?因为bsondump 的工作是将输出转换为 JSON。如果它来自mongoexport,那么它已经是 JSON 或 CSV,因为它们是唯一支持的东西。您的意思可能是 --jsonArray 和 mongoexport,否则默认情况下是“换行符”。
  • 更重要的是,如果这实际上是 69GB,那么创建一个以“数组”表示法包装的文件几乎毫无意义,因为您显然不想将全部内容实际加载到内存中(或者至少我希望不是)。所以你真正应该问的是如何设置你的“解析器”,它实际上需要读取这个 JSON 输出(甚至直接读取 BSON)来处理默认的“换行符”分隔。因为--jsonArray 实际上只是一个“hack”,用于处理懒惰的代码,而懒得设置这样的东西。也适用于“小”数据。
  • @NeilLunn 请查看我的问题的更新。
  • 我看到你添加的内容,我认为它只是重新强化了我的观点。你不想要一个像“jsonArray”这样的输出。相反,您应该读取块并在边界上解析,而不是将所有内容都放入内存并在完整内容上运行解析。这是很容易的事情。但是你问了所有错误的问题,让自己很难受。我应该能够为您指出正确的方法来做到这一点。而是提出关于这些的问题。
  • 您在寻求帮助时可能会考虑更有礼貌。

标签: mongodb bson


【解决方案1】:

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

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

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

【讨论】:

  • 您愿意分享您的工具吗?遇到同样的挑战 - 尝试了我在 C# 中能想到的一切
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多