我有一个 Rails/Mongoid 应用程序,它使用 highcharts 在客户端显示数据。现在,为了将数据传递给 Javascript,我在模板文件中使用了 Mongoid 查询和 Rails 的 as_json/to_json。这对我来说似乎非常低效,因为必须将 json 数据解析为 ruby 结构,然后重新转换为 JSON。当有少量数据时这没关系,但在我的情况下,可能会有很多。
所以我的问题是,我怎样才能进行原始 mongodb 查询,并将输出直接写入 Rails 响应缓冲区而不经过 Ruby JSON 序列化/反序列化?
最佳答案
MongoDB 中的数据存储在 BSON 中,不是 JSON。 ruby 驱动程序在 read_documents 方法中进行反序列化(BSON::BSON_CODER.deserialize)。如果您想推出自己的 BSON-to-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 接口(interface),提供 JSON。但是您必须在应用程序中进行一些访问控制,基本上还有代理请求。
关于ruby-on-rails - rails中的原始mongodb查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5759533/