我使用的是 mongo 2.6.1。我想从 > 16 MB 的 json 文件导入数据。 json 是一个文档数组。根据他们的文档,如果我使用 --jsonArray
选项,该文件只能是 16MB,请参阅 http://docs.mongodb.org/manual/reference/program/mongoimport/
奇怪的是,我已经成功地使用 mongoimport 导入了 > 16 MB (24MB) 的数据,方法是:
mongoimport -db mydb --collection product --file products.json --jsonArray
那么这个 16MB 限制是多少呢?
最佳答案
16 MB 是 MongoDB BSON document size limit 。这意味着 MongoDB 中的任何文档都不能超过 16 MB。
请注意,MongoDB 文档的 JSON 表示可能会超出此限制,因为 BSON 更加紧凑。
--jsonArray
标志的问题在于 mongoimport
首先将整个 .json
文件作为单个文档读取,然后执行导入其每个元素,因此受到 BSON 文档大小限制。
新 MongoDB 版本(2.5.x
及更高版本)的解决方案
我刚刚使用非常大的 JSON 数组(约 200 MB)使用最新的 MongoDB 2.6.4
测试了 mongoimport
并且它运行得很好。
我非常确定 MongoDB 2.2.x
不可能进行这样的操作。所以,它看起来像 mongodb.org只是忘记更新 mongoimport
文档。
我搜索了 MongoDB bug tracker 并 found this issue 。据其称,这个问题在一年前就得到了解决,并且该修复程序随 MongoDB 2.5.0
一起发布。
因此,请随意导入大型 JSON 文档!
旧版 MongoDB 的解决方案(2.5.0
之前)
如果您使用旧版本的 MongoDB,仍然可以使用 --type json
标志而不是 --jsonArray
导入大量文档。但它假设要从中导入文件的特殊结构。它与 JSON 格式类似,只不过每行只允许一个文档,并且每行后面没有逗号:
{ name: "Widget 1", desc: "This is Widget 1" }
{ name: "Widget 2", desc: "This is Widget 2" }
关于mongodb - 如果使用 jsonArray,对 Mongo 的导入限制为 16MB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25353794/