代码之家  ›  专栏  ›  技术社区  ›  benjist

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

  •  0
  • benjist  · 技术社区  · 7 年前

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

    可以选择使用mongoexport创建json数组。但是这个bson文件是从另一台机器导出的,出于大小和性能考虑,我不想在使用mongoexport从db导出它之前导入这个大文件。

    为了提供更多背景信息,我需要将基于bson的mongodb导出转换为json:

    1) 我试图使用mongoexport直接从mongodb导出json。就像这样:

    mongoexport -d mydb -c notifications --jsonArray -o lv.json
    

    2) mongodump工作得更快,可能是因为它不必转换为json,只需转储内部数据。它也显示了进步,所以我知道它什么时候会结束。所以这是我唯一可以在生产服务器上运行的东西。

    mongodump --db mydb
    

    编辑2

    导出到.bson后,可以使用bsondump将.bson文件转换为.json文件:

    bsondump mydata.bson > mydata.json
    

    这里要明确一点:bsondump没有像mongoexport那样的--jsonArray选项。因此,它无法导出有效的json数组,而是将multpiple根对象转储到一个文件中。结果是一个无效的文档,必须对其进行预解析。

    /编辑2

    3) 我基本上有两种选择:将bson转储导入本地db,并使用mongoexport-jsonArray将其导出到适当的json文件。或者找到一种方法来解决bsondump本身无法导出到正确的json数组文件的问题。第三种选择是在我的工具中实现bson解析器,这是我并不真正感兴趣的。。。

    我的工具有问题。我的工具是用C++编写的,专门用于大型数据流。我将rapidjson与SAX解析器一起使用,并通过自己的类似SQL的计算器过滤记录。内存使用率在<通常是10MB,因为我使用SAX解析器而不是DOM。

    1 回复  |  直到 7 年前
        1
  •  2
  •   benjist    7 年前

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

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

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