我有一个包含许多小文档的MongoDB集合备份。备份是由mongodump
生成的,但是当我尝试使用mongorestore
导入它时出现错误:
AssertionException处理请求,关闭客户端连接:10334 BSONObj大小:18039019(0x11340EB)无效。大小必须介于0到16793600之间(16MB)
我正在运行MongoDB 3.0.3版(来自主干)。
答案 0 :(得分:8)
每次使用--batchSize=100
都可以解决这个问题。
e.g。 mongorestore -d my-database --batchSize=100 ./database-dump-directory
答案 1 :(得分:1)
基本上mongoDB接受文件的大小应该小于16MB。如果你打算使用超过16MB的文件,你可以使用gridfs。 每个文档占用2个大小分配的内存功率。 您的应用程序应该确保它生成的bson文档的大小。否则您可以使用不同的数据模型,而不是将所有数据嵌入到一个文档中。
答案 2 :(得分:1)
mongorestore
在{"applyOps", entries}
文档中按批处理发送插入命令。该文件(AFAIK)仅限于16MB,与任何其他文件一样。
根据the sources,存在"病态情况,其中许多小操作的数组开销可能溢出最大命令大小" 。变量oplogMaxCommandSize
用于帮助mongorestore
不在这种情况下失败。在3.0开发期间的某个时刻,它被提升到了16.5M。这太乐观了。它被降低到8M(JIRA TOOLS-754)。
如果需要,您可以根据自己的需要自行调整该值。然后重新编译工具。