MongoDB / Mongoid vous permet de le faire. Votre exemple fonctionnera, la syntaxe est juste incorrecte.
@stocks = Stock.Where(:prices.value.lt => p) #does not work
@stocks = Stock.where('prices.value' => {'$lt' => p}) #this should work
Et, il est toujours enchaîné, vous pouvez donc également commander par nom :
@stocks = Stock.where('prices.value' => {'$lt' => p}).asc(:name)
J'espère que cela t'aides.