Получение случайной записи из MongoDB с помощью RubyAlexSoulim

В 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

Комментарии
kronos

Бррр Kernel.rand()…

Пожалуйста авторизуйтесь, чтобы добавить комментарий. Вход