1

次のように MongoDB からデータを取得しています。

@bs = coll2.find("date" => {"$gte" => initial_date, "$lte" => Time.now.utc})

正常に動作しますが、@bs をレンダリングすると、空が送信されます。

  render :json => @bs

@bs.each を実行し、それぞれを json としてレンダリングすると機能しますが、@bs 全体を送信したいと考えています。

ありがとう

4

1 に答える 1

2

デフォルトで#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.....]
于 2011-05-11T21:53:39.520 に答える