1

私はMongo Rubyドライバーを使用しており、コードの前後にRubyコードのこのブロックがありline 171ます。これは明らかにその下のエラーの原因です(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.countMongo::Cursor

Google でこの問題の例は見つかりませんでした。私が見つけた Web 上のすべての 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

これは、RubyMongoドライバーlimit()メソッドにnilを渡すときに発生します。

于 2012-06-21T14:57:40.353 に答える