J'utilise les rails 3 avec mongoïde. J'ai une collection de stocks avec une collection intégrée de prix:Interrogation d'objets incorporés dans Mongoid/rails 3 ("Inférieur à", opérateurs Min et tri)
class Stock
include Mongoid::Document
field :name, :type => String
field :code, :type => Integer
embeds_many :prices
class Price
include Mongoid::Document
field :date, :type => DateTime
field :value, :type => Float
embedded_in :stock, :inverse_of => :prices
Je voudrais obtenir les actions dont le prix minimum depuis une date donnée est inférieure à un prix donné p, puis être en mesure de trier les prix pour chaque stock.
Mais il semble que Mongodb ne le permette pas. Parce que cela ne fonctionnera pas:
@stocks = Stock.Where(:prices.value.lt => p)
En outre, il semble que MongoDB ne peut pas trier les objets incorporés.
Alors, existe-t-il une alternative pour accomplir cette tâche?
Peut-être que je devrais mettre tout dans une collection pour que je puisse facilement exécuter la requête suivante:
@stocks = Stock.Where(:prices.lt => p)
Mais je veux vraiment obtenir des résultats regroupés par noms d'actions après ma requête (stocks distincts avec un tableau de prix commandés par exemple). J'ai entendu parler de map/reduce avec la fonction de groupe mais je ne suis pas sûr de savoir comment l'utiliser correctement avec Mongoid.
http://www.mongodb.org/display/DOCS/Aggregation
L'équivalent dans SQL serait quelque chose comme ceci:
SELECT name, code, min(price) from Stock WHERE price<p GROUP BY name, code
Merci pour votre aide.
Notez que des requêtes plus complexes peuvent encore être effectuées, comme ceci: 'all_of ({: 'books.name' => 'name'}, {: 'books.author' =>/joe/i})' –