Rails 中的原始 mongodb 查询
我有一个 Rails/Mongoid 应用程序,它使用 highcharts 在客户端显示数据。现在,为了将数据传递给 Javascript,我在模板文件中使用 Mongoid 查询和 Rails 的 as_json/to_json 。这对我来说似乎效率很低,因为必须将 json 数据解析为 ruby 结构,然后重新转换为 JSON。当数据量很少时,这没问题,但就我而言,数据量可能很大。
所以我的问题是,如何执行原始 mongodb 查询,并将输出直接写入 Rails 响应缓冲区,而不经过 Ruby JSON 序列化/反序列化?
I have a Rails/Mongoid app that displays data client-side using highcharts. Right now, to pass the data to Javascript, I use a Mongoid query and Rails' as_json/to_json in the template file. This seems very inefficient to me because the json data has to be parsed into ruby structures, and then re-converted to JSON. This is okay when there is a small amount of data, but in my case, there can be a lot.
So my question is, how can I do a raw mongodb query, and just write the output directly to the Rails response buffer without going through Ruby JSON serialization/deserialization?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
MongoDB中的数据存储在BSON中,而不是JSON。
ruby 驱动程序在 read_documents 方法中进行反序列化(BSON::BSON_CODER.deserialize)。如果您想推出自己的 BSON 到 JSON,则需要 BSON::BSON_coder.deserialize 的实现,并且可能需要在 mongo-ruby 驱动程序中重写更多部分。
但是,如果这是可以接受的开销,那么您只需继承 ActionController::Metal 并执行如下操作:
另一种替代方案可能是使用 MongoDB 的 REST HTTP 接口,提供 JSON。但是您必须在应用程序中进行一些访问控制,并且基本上是代理请求。
The data in MongoDB is stored in BSON, which is not JSON.
The ruby driver does deserialization (BSON::BSON_CODER.deserialize) in read_documents method. If you'd like to roll your own BSON-to-JSON, you'll need your implementation of BSON::BSON_coder.deserialize, and, probably, rewrite more parts in mongo-ruby driver.
If, however, this is a overhead that's acceptable, then you'll just subclass ActionController::Metal and do something like this:
Another alternative might be using the MongoDB's REST HTTP interface, which provides JSON. But you'll have to have some access control in your application, and, basically, proxy requests.