В SQL получение случайно записи возможно при помощи чего-то типа “ORDER BY RAND()”.
В MongoBD не все так просто, но Эрик Любов (Eric Lubow) придумал одно решение:
@@mongodb = Mongo::Connection.new("localhost", 27017).db("test_db}")
@collection = @@mongodb["collection_name"]
@rand = Kernel.rand()
@random_record = @collection.find_one({ 'random' => { '$gte' => @rand } })
if @random_record.nil?
@random_record = @collection.find_one({ 'random' => { '$lte' => @rand } })
end
Суть метода в том, что к коллекции добавляется специальный столбец (random), который хранит значение от 0 до 1.
После соединения с базой данных генерируется случайное число (от 0 до 1) и мы пытаемся получить документ со значением в поле random большим или равным этому числу. Если результат отрицательный, то берем документ со значением меньшим или равным случайному числу.
Больше деталей в статье Getting a Random Record From a MongoDB Collection
Бррр Kernel.rand()…