Тривиальное решение здесь - сортировка по убыванию количества попаданий. Затем вы перемещаетесь по результатам, пока не найдете свой идентификатор пользователя.
Понятно, что это решение не обеспечивает высокой производительности, если вам приходится много запускать его. Легко получить «топ-20», но гораздо больше вычислений - «нижние 25%».
Если этот запрос действительно важен или вы его часто выполняете, есть несколько обходных путей.
Я думаю, что проще всего просто запустить работу, которая регулярно строит для вас процентили. По сути, вы создаете коллекцию, которая выглядит следующим образом:
{ percent : 95, score : 888888 }
{ precent : 90, score : 777777 }
...
Чтобы получить процентиль пользователя, просто посмотрите его счет в этой относительно небольшой коллекции. Чтобы обновить эти оценки, просто регулярно запускайте задание, которое просматривает всех пользователей.