次のように MongoDB からデータを取得しています。
@bs = coll2.find("date" => {"$gte" => initial_date, "$lte" => Time.now.utc})
正常に動作しますが、@bs をレンダリングすると、空が送信されます。
render :json => @bs
@bs.each を実行し、それぞれを json としてレンダリングすると機能しますが、@bs 全体を送信したいと考えています。
ありがとう
次のように MongoDB からデータを取得しています。
@bs = coll2.find("date" => {"$gte" => initial_date, "$lte" => Time.now.utc})
正常に動作しますが、@bs をレンダリングすると、空が送信されます。
render :json => @bs
@bs.each を実行し、それぞれを json としてレンダリングすると機能しますが、@bs 全体を送信したいと考えています。
ありがとう
デフォルトで#find
は、実際の結果ではなく、Mongo::Cursor オブジェクトを返します。最初に cursur ( @bs
) を結果を含む配列に変換してから、それを json としてレンダリングします。
render :json => @bs.to_a.to_json
これはカーソルであるため、結果を返すか、それらの反復処理を開始すると、to_a
呼び出しによってすべての結果が返されるわけではないことに注意してください。rewind!
結果セットをリセットするには、次のように呼び出す必要があります。
> @bs.to_a
# => [{"_id" => BSON::ObjectID.....]
> @bs.to_a
# => []
> @bs.rewind!
# => true
> @bs.to_a
# => [{"_id" => BSON::ObjectID.....]