У меня есть коллекция Firestore с именем 'users'
и много документов по имени каждого пользователя.
Я хочу получить список из 25 пользователей за раз в алфавитном порядке, и вот что я пробовал:
const allUsersRef = admin.firestore().collection('users').orderBy('name').offset(0).limit(25)
allUsersRef.get().then((top25Users) => {
let usersList = '``` << Users LIST >>\n'
if (!top25Users.empty) {
top25Users.forEach(eachUser => {
usersList = usersList + `\n${eachUser.data().name} \n${eachUser.data().id}`
})
console.log(usersList)
return
} else {
message.channel.send('Looks like we have no users at the moment!')
return
}
}).catch((error) => {
console.log(error)
return
})
Таким образом я легко могу попасть в 25 лучших пользователей! Но что, если я хочу следующие 25? Это Discord Bot, а не приложение Android, в котором я могу добавить кнопку [просмотреть больше], а затем продолжить результаты query.start()
, как показано в этом видео firebase
Я могу используйте OFFSET
, но количество пользователей велико, поэтому использование offset(500)
будет не по карману: '(
Также мне нужно выбирать пользователей в алфавитном порядке, и когда новые пользователи регистрируются, порядок меняется.
TL, DR: Если бы у меня был список моих пользователей в алфавитном порядке, как мне получить пользователей со 126-й позиции до 150-й позиции в списке, что является своего рода страницей 5 для моего запроса 25 на страницу! И без с использованием смещения, потому что это просто использует больше ресурсов!
Сначала это было в базе данных firebase в реальном времени, но затем мне потребовались более сложные запросы, поэтому я перешел сюда:)
Database Struture: Just a single collection named USERS and documents named as username in it.
PS:
const startAtRes = await db.collection('cities')
.orderBy('population')
.startAt(1000000)
.get();
Использование чего-то вроде этого ^ из документации Firebase невозможно, потому что я не буду знать, с чего начать. По мере того как список меняется, как новые пользователи Зарегистрируйтесь!