Необработанный запрос mongodb в рельсах - PullRequest
5 голосов
/ 23 апреля 2011

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

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

1 Ответ

3 голосов
/ 23 апреля 2011

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

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

...