Я использую рельсы 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
Спасибо за вашу помощь.