如果使用jsonArray,Mongo的导入限制为16MB

Mor*_*ive 1 mongodb

我使用的是mongo 2.6.1.我想从json文件> 16 MB导入数据.json是一系列文档.根据他们的文档,如果我使用该--jsonArray选项,文件只能是16MB,请参阅http://docs.mongodb.org/manual/reference/program/mongoimport/

奇怪的是,我已经设法导入数据> 16 MB(24MB)使用mongoimport没问题,通过这样做:

mongoimport -db mydb --collection product --file products.json --jsonArray
Run Code Online (Sandbox Code Playgroud)

那么16MB的限制是什么呢?

Leo*_*tny 7

16 MB是MongoDB BSON文档大小限制.这意味着MongoDB中的任何文档都不能超过16 MB.

请注意,MongoDB文档的JSON表示可能超出此限制,因为BSON更紧凑.

--jsonArrayflag 的问题是首先mongoimport将整个.json文件作为单个文档读取,然后对其每个元素执行导入,从而遭受BSON文档大小限制.

新MongoDB版本(2.5.x及更高版本)的解决方案

我刚刚使用非常大的JSON数组(~200 MB)测试mongoimport了最新的MongoDB 2.6.4,它运行得很好.

我很确定使用MongoDB这样的操作是不可能的2.2.x.所以,看起来mongodb.org只是忘了更新mongoimport文档.

我搜索了MongoDB bug跟踪器并发现了这个问题.根据它,这个问题在一年前解决了,修复程序是在MongoDB上发布的2.5.0.

所以,随意导入大型JSON文档!

旧MongoDB版本的解决方案(之前2.5.0)

如果你使用旧版本的MongoDB,仍然可以使用--type jsonflag代替而导入大量文档--jsonArray.但是它假定从中导入文件的特殊结构.它与JSON格式类似,只是每行只允许一个文档,每个文档后面没有逗号:

{ name: "Widget 1", desc: "This is Widget 1" }
{ name: "Widget 2", desc: "This is Widget 2" }
Run Code Online (Sandbox Code Playgroud)