在轨道中的原始mongodb查询

mar*_*ter 5 ruby-on-rails mongodb mongoid

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

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

Rom*_*man 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
Run Code Online (Sandbox Code Playgroud)

另一种选择可能是使用 MongoDB 的REST HTTP 接口,它提供 JSON。但是您必须在应用程序中进行一些访问控制,并且基本上是代理请求。