Когда я столкнулся с подобным решением, я вернулся и обнаружил, что бизнес-запрос на самом деле был направлен на создание некоторой формы ротации представляемого инвентаря. В этом случае есть гораздо лучшие варианты, которые имеют ответы от поисковых систем, таких как Solr, а не от хранилищ данных, таких как MongoDB.
Короче говоря, с требованием «разумно вращать» контент, что мы должны делать вместо случайного числа во всех документах, это включать персональный модификатор q Score. Чтобы реализовать это самостоятельно, принимая во внимание небольшую группу пользователей, вы можете хранить документ для каждого пользователя, который имеет идентификатор продукта, число показов, количество кликов, дату последнего посещения и любые другие факторы, которые компания считает значимыми для вычисления показателя aq. модификатор. При извлечении набора для отображения, как правило, вы запрашиваете больше документов из хранилища данных, чем запрошено конечным пользователем, затем применяете модификатор q Score, берете количество записей, запрошенных конечным пользователем, а затем рандомизируете страницу результатов, крошечную установить, поэтому просто сортируйте документы на прикладном уровне (в памяти).
Если юниверс пользователей слишком велик, вы можете классифицировать пользователей по группам поведения и индексировать по группам поведения, а не по пользователю.
Если набор продуктов достаточно мал, вы можете создать индекс для каждого пользователя.
Я считаю, что этот метод намного эффективнее, но, что более важно, более эффективен при создании соответствующего, полезного опыта использования программного решения.