Estoy usando rails 3 con mongoid. Tengo un conjunto de acciones con una colección incrustada de precios:Consultar objetos incrustados en Mongoid/rails 3 ("Inferior a", min operadores y clasificación)
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
quisiera obtener las acciones cuyo precio mínimo desde una fecha determinada es inferior a un precio p dado, y luego ser capaz de ordenar los precios de cada acción.
Pero parece que Mongodb no permite hacerlo. Debido a esto no funcionará:
@stocks = Stock.Where(:prices.value.lt => p)
Además, parece que no puede mongodb objetos incrustados tipo.
Entonces, ¿hay alguna alternativa para llevar a cabo esta tarea?
Tal vez debería poner todo en una colección para que yo podría fácilmente ejecutar la consulta siguiente:
@stocks = Stock.Where(:prices.lt => p)
Pero realmente quiero obtener resultados agrupados por nombres de archivo después de mi consulta (acciones distintas con una gran variedad de precios ordenados, por ejemplo). He oído hablar de map/reduce con la función de grupo, pero no estoy seguro de cómo usarlo correctamente con Mongoid.
http://www.mongodb.org/display/DOCS/Aggregation
El equivalente en SQL sería algo como esto:
SELECT name, code, min(price) from Stock WHERE price<p GROUP BY name, code
Gracias por su ayuda.
Tenga en cuenta que todavía se pueden realizar consultas más complejas, como esta: 'all_of ({: 'books.name' => 'name'}, {: 'books.author' =>/joe/i})' –