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