Вы можете использовать startAfter
/ startAt
и предоставить ссылку на документ для смещения вашего запроса.
Таким образом, если у вас есть список из двадцати лучших записей, вы можете повторить тот же самый запрос, ноукажите, что это startAfter
последний элемент в вашем списке, тогда вы будете возвращать записи для позиций от 20
до 39
и т. д.
Вы также можете установить запрос offset
для возврата результатовэто вернуло бы в заданной позиции, однако это крайне не рекомендуется, потому что для использования offset
вы выполняете запись для каждого пропускаемого документа.Поэтому, если вы хотите получить двадцать первых игроков, вам придется ждать 9 980 считываний документов!
Вы можете проверить Разбить данные на страницы с помощью курсоров запросов для получения дополнительной информации.
С точки зрения существующей структуры данных ...
Чтобы узнать рейтинг пользователя по его идентификатору, вам, вероятно, придется вручную кэшировать его текущий рейтинг.Вы можете настроить запланированное задание для вычисления рейтинга игрока и вычисления рейтинга каждого игрока ежедневно.Это будет дорогостоящим, поскольку количество операций записи за одно выполнение будет зависеть от вашего количества пользователей;и поскольку он основан на кеше, с учетом временных ограничений (игрок не увидит изменения своего ранга, пока вы не вычислите его в следующий раз.)
Более упрощенный подход - взять верхний балл, нижнийОценка и масштабирование их баллов до эквивалентного ранга в зависимости от количества пользователей (это не обязательно должен быть линейный масштаб, вы можете использовать кривую колокольчика), однако это будет неточно и возможно для нескольких пользователейчтобы иметь одинаковый ранг.Тем не менее, это может быть подходящей уступкой в зависимости от вашего варианта использования.
Другой способ - это заставить пользователей самостоятельно обновлять систему ранжирования, когда они пытаются просмотреть свой собственный рейтинг.Он может смотреть на точки пользователя, которые идут впереди него и под ним, и эффективно поддерживать ранги, определяя, должен ли он стать до или после соседних записей.Это потребовало бы более сложной структуры правил для предотвращения мошенничества и внесло бы разрыв в ваш набор данных рейтинга.