Comments 5
У вас получается одна и та же выборка, если делать просто asc(:rand_order), не?
Вот вариант рабочий cookbook.mongodb.org/patterns/random-attribute/, возможно я не допонял что-то в вашем методе.
Вот вариант рабочий cookbook.mongodb.org/patterns/random-attribute/, возможно я не допонял что-то в вашем методе.
да, вы правы, сейчас исправлю. Во втором методе так же нужно делать skip на случайное количество записей
skip на случайное количество записей тоже не спасет, ибо последовательность, определенная этим рандомным полем будет отсортирована всегда одинаково, и рандомный skip лишь сместит начало цепочки, а дальше записи будут идти последовательно… Либо надо запрашивать COUNT_OF_POSTS_TO_SHOW раз по одной записи, либо как по ссылке через mapReduce
Вы знаете, мне их решение из cookbook, на которое вы ссылаетесь, не кажется таким уж хорошим. По сути, они тоже делают генерацию случайного числа для каждого документа, после чего, для вывода случайной записи, генерируют новое случайное число и выбирают те записи у которых это число больше (или меньше, это без разницы). Это может привести к ситуации, что число, которое мы генерируем на лету, очень большое или очень маленькое и в ответ мы просто не получим то количество записей, на которое рассчитываем.
В моем варианте, я позволяю себе использовать тяжелую для базы операцию skip, но это дает гарантии того, что мы получим в ответ то количество записей, которое ожидаем.
Собственно, у каждого из решений есть свои минусы, которые нужно учитывать, при выборе.
В моем варианте, я позволяю себе использовать тяжелую для базы операцию skip, но это дает гарантии того, что мы получим в ответ то количество записей, которое ожидаем.
Собственно, у каждого из решений есть свои минусы, которые нужно учитывать, при выборе.
Sign up to leave a comment.
Выборка случайных документов из коллекции MongoDB