在轨道中的原始mongodb查询

时间:2011-04-22 20:01:45

标签: ruby-on-rails mongodb mongoid

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

所以我的问题是,如何进行原始的mongodb查询,直接将输出写入Rails响应缓冲区而不进行Ruby JSON序列化/反序列化?

1 个答案:

答案 0 :(得分:3)

MongoDB中的数据存储在BSON中,而不是JSON。 ruby驱动程序在read_documents方法中进行反序列化(BSON :: BSON_CODER.deserialize)。如果您想将自己的BSON转换为JSON,则需要实施BSON :: BSON_coder.deserialize,并且可能在mongo-ruby驱动程序中重写更多部分。 但是,如果这是一个可接受的开销,那么你只需将ActionController :: Metal子类化并执行以下操作:

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。但是你必须在你的应用程序中拥有一些访问控制,基本上是代理请求。