2011-05-11 74 views
1

數據我從MongoDB中讀取數據如下:返回JSON從MongoDB的

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

它工作正常,但是當我渲染@bs,它發送空。

render :json => @bs 

如果我做了@ bs.each和渲染每一個爲JSON,它的工作原理,但是,我想發整個@bs。

感謝

回答

2

默認情況下,#find返回蒙戈:: 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.....] 
+0

謝謝,這很有道理。我如何將光標轉換爲數組?有沒有一個簡單的方法來做到這一點? – Donald 2011-05-11 21:57:26

+0

我例子中的'@ bs.to_a'部分爲你做了。然後你在數組上調用'to_json'來獲取JSON數據。 – 2011-05-11 22:02:40

+0

我仍然收到[],但@bs正在返回結果。 – Donald 2011-05-11 22:07:19