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

Mongodb 从bsondump导出的json创建对象数组,mongodb,bson,Mongodb,Bson,我使用bsondump将一个巨大的(69GB)文件导出为json。我希望得到一个有效的json数组,但是对象并没有分开 有一个使用mongoexport创建json数组的选项。但是这个bson文件是从另一台机器导出的,出于大小和性能考虑,我不想在使用mongoexport从db导出它之前导入这个大文件 如何使用bsondump导出有效的json数组 编辑 为了提供更多背景信息,我需要将基于bson的mongodb导出转换为json: 1) 我试图使用mongoexport直接从mongodb导出

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

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

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

/Edit2

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


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

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

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


[1]

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

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


[1]

您可能从数据库中退出了
mongodump
?因为
bsondump
的任务是将该输出转换为JSON。如果它来自
mongoexport
,那么它已经是JSON或CSV了,因为它们是唯一受支持的东西。您可能指的是来自
mongoexport
,否则它是默认分隔的“换行符”。更重要的是,如果这实际上是69GB,那么创建一个以“array”符号包装的文件几乎是毫无意义的,因为您显然不想实际将完整内容加载到内存中(或者至少我希望不是这样)。因此,您真正应该问的是如何设置您的“解析器”,它实际上需要读取这个JSON输出(甚至直接读取BSON)来处理默认的“换行符”分离。因为
--jsonArray
实际上只是一种处理懒散代码的“黑客”,而懒得设置这些东西。也意味着“小”数据。@NeilLunn请看我问题的更新。我看到了你添加的内容,我认为它只是强化了我的观点。这里不需要类似“jsonArray”的输出。相反,您应该读取块并对边界进行解析,而不是将所有内容都存储到内存中并对完整内容进行解析。这很容易。但是你问了所有错误的问题,这让你自己很难受。我应该能给你指出正确的方法。当你请求帮助时,你可能会考虑更礼貌些。也许你从数据库中看了<代码> MangoDoP<<代码>?因为
bsondump
的任务是将该输出转换为JSON。如果它来自
mongoexport
,那么它已经是JSON或CSV了,因为它们是唯一受支持的东西。您可能指的是来自
mongoexport
,否则它是默认分隔的“换行符”。更重要的是,如果这实际上是69GB,那么创建一个以“array”符号包装的文件几乎是毫无意义的,因为您显然不想实际将完整内容加载到内存中(或者至少我希望不是这样)。因此,您真正应该问的是如何设置您的“解析器”,它实际上需要读取这个JSON输出(甚至直接读取BSON)来处理默认的“换行符”分离。因为
--jsonArray
实际上只是一种处理懒散代码的“黑客”,而懒得设置这些东西。也意味着“小”数据。@NeilLunn请看我问题的更新。我看到了你添加的内容,我认为它只是强化了我的观点。这里不需要类似“jsonArray”的输出。相反,您应该读取块并对边界进行解析,而不是将所有内容都存储到内存中并对完整内容进行解析。这很容易。但是你问了所有错误的问题,这让你自己很难受。我应该