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

标签 mongodb

我使用的是 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/

相关文章:

MongoDB:多处理更新和 '$inc' 操作

javascript - Mongoose 批量更新操作

node.js - 使用 Mongoose 统一错误捕获

node.js - Mongoose 查找回调未执行

c++ - Mongodb C++ 驱动程序和 GridFS 支持

Java 和 MongoDB - 检查嵌套数组中是否存在字段名称

mongodb - 使用 Golang mgo : Persistent no reachable server to replica set 连接到 MongoDB Atlas

node.js - 连接MongoDB Atlas时如何修复 'Error: querySrv EREFUSED'?

java - 在 Java 中使用 MongoDB 中的日期范围进行查询

mongodb - 如何在grails 3.3.11中使用静态嵌入?