ruby-on-rails - rails中的原始mongodb查询

标签 ruby-on-rails mongodb mongoid

我有一个 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/

相关文章:

ruby-on-rails - 无效的请求参数 : invalid %-encoding when upload file to Rails api only server

ruby-on-rails - Application.css.scss 导致 rails 4 出现问题

php - 在 MongoDB 中通过 PHP 调用存储过程

node.js - Mongoose:将 addToSet 与 ObjectIds 一起使用会导致孤立 ID

node.js - Mongoose 随机文档非顺序

javascript - 如何测试 create.js.erb 文件中哪个页面发送了 AJAX 请求?

ruby-on-rails - Mongoid 3.1.0 CounterCache 不起作用

ruby-on-rails - 为 has_one 关系接受使用 mongoid 的嵌套属性

ruby-on-rails - Rails 和 mongo 嵌入关系

ruby-on-rails - 使用2个相关模型创建和更新模型