1

我正在使用 Mongo Ruby 驱动程序,并且line 171在我的代码之前和之后都有这段 Ruby 代码,这显然是它下面的错误的来源(该query.each行是第 171 行):

    query = get_callback.call( "databases", id )
    if query.count > 0
      puts query.count.inspect + " results: " + query.inspect
      res = {}
      query.each do |result|
        puts result.inspect
      end
    else
      puts "No results" + res.inspect
      res = {}
    end

错误:

1 results: <Mongo::Cursor:0x3fc15642c154 namespace='myproj.databases' @selector={"_id"=>BSON::ObjectId('4fe120e4a2f9a386ed000001')} @cursor_id=>
TypeError - can't convert Mongo::Cursor into Integer:
        /Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/bson-1.6.4/lib/bson/byte_buffer.rb:156:in `pack'
        /Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/bson-1.6.4/lib/bson/byte_buffer.rb:156:in `put_int'
        /Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/mongo-1.6.4/lib/mongo/cursor.rb:603:in `construct_query_message'
        /Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/mongo-1.6.4/lib/mongo/cursor.rb:466:in `send_initial_query'
        /Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/mongo-1.6.4/lib/mongo/cursor.rb:459:in `refresh'
        /Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/mongo-1.6.4/lib/mongo/cursor.rb:128:in `next'
        /Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/mongo-1.6.4/lib/mongo/cursor.rb:291:in `each'
        /Users/myuser/Code/myproj/my_file.rb:171:in `block in initialize'

我的查询对象:{"_id"=>BSON::ObjectId('4fe120e4a2f9a386ed000001')}

我一点也不知道是什么原因造成的。我已经验证了我发现的对象存在,并且query.count表明我的Mongo::Cursor.

我在谷歌上没有找到任何关于这个问题的例子,我发现网络上的每个 Mongo/Ruby 都each像我一样使用迭代器。有谁知道这个错误的原因是什么?我注意到我在尝试使用to_a将集合转换为 JSON 可用对象时也得到了它。


对于它的价值,下面是 byte_buffer.rb 的相关部分。与<<line 156

def put_int(i, offset=nil)
  @cursor = offset if offset
  if more?
    @str[@cursor, 4] = [i].pack(@int_pack_order)
  else
    ensure_length(@cursor)
    @str << [i].pack(@int_pack_order)
  end
  @cursor += 4
end
4

1 回答 1

0

当您将 nil 传递给 Ruby Mongo 驱动程序limit()方法时,就会发生这种情况。

于 2012-06-21T14:57:40.353 回答