2011-04-22 5 views
5

J'ai une application Rails/Mongoid qui affiche les données côté client à l'aide de graphiques. En ce moment, pour passer les données à Javascript, j'utilise une requête Mongoid et le fichier as_json/to_json de Rails dans le fichier modèle. Cela me semble très inefficace car les données json doivent être analysées dans des structures ruby, puis reconverties en JSON. C'est correct quand il y a une petite quantité de données, mais dans mon cas, il peut y en avoir beaucoup. Donc, ma question est, comment puis-je faire une requête mongodb brut, et juste écrire la sortie directement dans le tampon de réponse Rails sans passer par la sérialisation/désérialisation de Ruby JSON?Requête mongodb brute dans les rails

+0

pouvez-vous donner quelques exemples? –

Répondre

3

Les données dans MongoDB sont stockées dans BSON, qui n'est pas JSON. Le pilote ruby ​​effectue la désérialisation (BSON :: BSON_CODER.deserialize) dans la méthode read_documents. Si vous souhaitez rouler votre propre BSON-to-JSON, vous aurez besoin de votre implémentation de BSON :: BSON_coder.deserialize, et, probablement, réécrire plus de parties dans mongo-ruby driver. Toutefois, si cela est une surcharge qui est acceptable, alors vous aurez juste sous-classe ActionController :: Métal et faire quelque chose comme ceci:

class ChartController < ActionController::Metal 
    def chart 
    res = fetch_data_from_mongodb 
    self.content_type = 'application/json' 
    self.response_body = res.to_json 
    end 
end 

Une autre alternative pourrait être en utilisant l'interface REST HTTP du MongoDB, qui fournit JSON. Mais vous devrez avoir un certain contrôle d'accès dans votre application, et, fondamentalement, des demandes de proxy.