Я использую рельсы 3 с монгоидом.
У меня есть коллекция акций со встроенной коллекцией цен:
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
Я хотел бы получить акции, минимальная цена которых с указанной даты ниже указанной цены p, а затем иметь возможность сортировать цены для каждой акции.
Но, похоже, Mongodb не позволяет это сделать.
Потому что это не сработает:
@stocks = Stock.Where(:prices.value.lt => p)
Также кажется, что mongoDB не может сортировать внедренные объекты.
Итак, есть ли альтернатива для выполнения этой задачи?
Может быть, я должен поместить все в одну коллекцию, чтобы можно было легко выполнить следующий запрос:
@stocks = Stock.Where(:prices.lt => p)
Но я действительно хочу получить результаты, сгруппированные по именам акций после моего запроса (например, отдельные акции с массивом упорядоченных цен). Я слышал о карте / уменьшении с помощью групповой функции, но я не уверен, как правильно использовать его с Mongoid.
http://www.mongodb.org/display/DOCS/Aggregation
Эквивалент в SQL будет выглядеть примерно так:
SELECT name, code, min(price) from Stock WHERE price<p GROUP BY name, code
Спасибо за вашу помощь.