私は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.count
たMongo::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