MongoDB / Mongoid permitem que você faça isso. Seu exemplo funcionará, a sintaxe está incorreta.
@stocks = Stock.Where(:prices.value.lt => p) #does not work
@stocks = Stock.where('prices.value' => {'$lt' => p}) #this should work
E ainda é encadeável para que você também possa pedir pelo nome:
@stocks = Stock.where('prices.value' => {'$lt' => p}).asc(:name)
Espero que isto ajude.