Необработанный запрос mongodb в rails

#ruby-on-rails #mongodb #mongoid

#ruby-on-rails #mongodb #mongoid

Вопрос:

У меня есть приложение Rails / Mongoid, которое отображает данные на стороне клиента с использованием highcharts. Прямо сейчас, чтобы передать данные в Javascript, я использую запрос Mongoid и Rails’ as_json / to_json в файле шаблона. Мне это кажется очень неэффективным, потому что данные json должны быть проанализированы в структурах ruby, а затем повторно преобразованы в JSON. Это нормально, когда имеется небольшой объем данных, но в моем случае их может быть много.

Итак, мой вопрос в том, как я могу выполнить необработанный запрос mongodb и просто записать выходные данные непосредственно в буфер ответов Rails, не проходя через сериализацию / десериализацию Ruby JSON?

Комментарии:

1. можете ли вы привести несколько примеров?

Ответ №1:

Данные в MongoDB хранятся в формате BSON, который не является JSON. Драйвер ruby выполняет десериализацию (BSON::BSON_CODER.deserialize) в методе read_documents. Если вы хотите преобразовать свой собственный BSON в JSON, вам понадобится ваша реализация BSON::BSON_coder.десериализуйте и, возможно, перепишите дополнительные части в драйвере 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
  

Другой альтернативой может быть использование HTTP-интерфейса REST MongoDB, который предоставляет JSON. Но у вас должен быть некоторый контроль доступа в вашем приложении и, в основном, прокси-запросы.