2011-04-22 43 views
5

我有一个使用highcharts显示数据客户端的Rails/Mongoid应用程序。现在,为了将数据传递给Javascript,我在模板文件中使用了Mongoid查询和Rails的as_json/to_json。这对我来说似乎非常低效,因为json数据必须被解析为ruby结构,然后重新转换为JSON。当有少量数据时,这是可以的,但在我的情况下,可能会有很多。在轨道中的原始mongodb查询

所以我的问题是,我怎样才能做一个原始的MongoDB查询,并直接写入输出直接到Rails响应缓冲区,而无需通过Ruby JSON序列化/反序列化?

+0

你能举一些例子吗? – 2011-04-23 12:34:25

回答

3

MongoDB中的数据存储在BSON中,而不是JSON。 ruby​​驱动程序在read_documents方法中执行反序列化(BSON :: BSON_CODER.deserialize)。如果你想推出你自己的BSON到JSON,你需要实现BSON :: BSON_coder.deserialize,并且可能会在mongo-ruby驱动中重写更多的部分。 但是,如果这是一个开销是可以接受的,那么你就只要继承的ActionController ::金属及做这样的事情:

class ChartController < ActionController::Metal 
    def chart 
    res = fetch_data_from_mongodb 
    self.content_type = 'application/json' 
    self.response_body = res.to_json 
    end 
end 

另一种方法是使用MongoDB的REST HTTP接口,它提供了JSON。但是,您必须在应用程序中拥有一些访问控制权,并且基本上还有代理请求。