当前位置: 首页 > 知识库问答 >
问题:

“文档超出了允许的最大BSON大小。最大值为16777216。”使用GridFS时出错

柳坚白
2023-03-14

我正在尝试使用GridFS和ruby在我的mongo数据库中插入一个33 MB的视频文件,我有一个系统性的“文档超过了允许的最大BSON大小。最大为16777216。”。我认为在mongo集合中插入大于16MB的文件的唯一方法是使用Gridfs,所以我怀疑我做得不对,即使我复制/粘贴了Ruby驱动程序示例(http://docs.mongodb.org/ecosystem/tutorial/ruby-driver-tutorial/#gridfs).

我正在使用Ruby 2.2。1,mongo驱动程序2.0。4和mongo db 3.0。1.我的代码:

eDatabase = Mongo::Client.new(......)
@grid = @eDatabase.database.fs


myvideo = File.open("files/33mo.mov", 'rb')

grid_file = Mongo::Grid::File.new(myvideo.read, :filename => "myvideo.mov")
@grid.insert_one(grid_file)

还有我的日志:

21/05/2015 11:12:25] ERROR : Exception in main loop : Document exceeds allowed max BSON size. The max is 16777216.
[21/05/2015 11:12:25] ERROR : Backtrace : /Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/protocol/serializers.rb:157:in `serialize'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/protocol/message.rb:153:in `block in serialize_fields'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/protocol/message.rb:141:in `each'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/protocol/message.rb:141:in `serialize_fields'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/protocol/message.rb:70:in `serialize'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/server/connection.rb:123:in `block in write'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/server/connection.rb:122:in `each'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/server/connection.rb:122:in `write'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/server/connectable.rb:66:in `block in dispatch'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/loggable.rb:44:in `log'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/loggable.rb:65:in `log_debug'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/server/connectable.rb:65:in `dispatch'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/operation/executable.rb:35:in `block in execute'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/server/connection_pool.rb:99:in `with_connection'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/server/context.rb:63:in `with_connection'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/operation/executable.rb:34:in `execute'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/operation/write/insert.rb:71:in `execute_write_command'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/operation/write/insert.rb:61:in `execute'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/collection.rb:196:in `insert_many'
/Users/Atome/.rvm/gems/ruby-2.2.1/gems/mongo-2.0.4/lib/mongo/grid/fs.rb:78:in `insert_one'
server.rb:530:in `handle_addobject_message'

仅供参考,server.rb:530行对应于

@grid.insert_one(grid_file)

笔记:

  • 同样的代码在一个

多谢你的帮忙

共有1个答案

杭柏
2023-03-14

根据mongodb jira ticket RUBY-946,这是一个bug,应该在新发布的RUBY驱动程序2.0中进行更正。5.请参阅此谷歌群中的评论

 类似资料:
  • 我正在处理大量的二进制文件。在最近对本地git repo进行了一次更改之后,我试图将更改推回到远程,结果收到以下错误。 不幸的是,我不能使用这里描述的策略,因为所有的更改都包含在一次提交中。有什么建议吗?我怎样才能绕过这个包装尺寸限制?

  • 我正在使用我岳父让我建立的一个网站作为学习React的借口。我不是一个天生的JavaScript开发人员(更喜欢后端),我知道我下面的代码中可能有一些递归元素,但我就是看不到。谁能告诉我我做错了什么?

  • 这是的内容: 已删除几次,并尝试重新安装。无法理解是什么原因造成的,以及如何修复它。

  • 如果我逃跑 在铬33上,我得到 为什么?

  • 我正在尝试将文档批量插入MongoDB(因此绕过Mongoose并使用本机驱动程序,因为Mongoose不支持批量插入文档数组)。我这样做的原因是为了提高写作速度。 我收到错误RangeError: Maximum Call Stack Size Exceeded在console.log(err)在下面的代码: 类似于:https://stackoverflow.com/questions/243

  • 问题内容: 当我运行我的代码时,Node.js引发由过多的递归调用引起的异常。我试图将Node.js堆栈大小增加,但是Node.js崩溃而没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将输出。是否有可能在不删除递归调用的情况下解决此问题? 问题答案: 您应该将递归函数调用包装到 , 要么 函数使node.js有机会清除堆栈。如果您不这样做,并且有很多循环没有任何 真正的 异步