#firebase #google-cloud-firestore
#firebase #google-cloud-firestore
Вопрос:
У меня есть коллекция расписаний с документами с такими полями, я хочу получить маршрут с самым высоким трафиком, выполнив запрос, который упорядочивает по route
полю, и выполнить подсчет того же поля. Мой вопрос в том, как я могу посчитать после заказа по полю? Это мой запрос прямо сейчас
scheduleByRoutes() {
return this.afs.collection('schedules', ref => ref.orderBy('route', 'asc')).snapshotChanges();
}
Ответ №1:
Нет прямого способа подсчитать количество документов каждой route
«категории», возвращаемых вашим запросом OrderBy().
Вы должны либо:
1/ Считайте их у своего клиента, повторяя результаты запроса.
или
2/ Если вам заранее известны различные маршруты, отправьте запрос для каждого route
и используйте size()
метод каждого QuerySnapshot
. Вы можете использовать Promise.all()
для выполнения этих вызовов параллельно.
или
3/ Поддерживайте некоторые счетчики для каждого route
, например, в другой коллекции. Для этого вы должны использовать набор облачных функций, которые будут обновлять счетчики при создании / модификации / удалении.
Имейте в виду, что подходы № 1 и № 2 будут стоить прочтения документа для каждого документа коллекции. Если ваша коллекция содержит много документов, вы можете использовать подход № 3.
Комментарии:
1. Подход № 3 звучит так, как я бы выбрал. Мне нужно подумать о том, как это сделать, позвольте мне прочитать об облачных функциях. Никогда не использовал их, все еще новичок в firebase.
2. Да, подход № 3 наиболее сложный в реализации, но, вероятно, самый интересный. Обратите внимание, что вы можете использовать некоторые распределенные счетчики, если в вашем приложении много трафика, см. firebase.google.com/docs/firestore/solutions/counters
3. @Mena Привет, у тебя было время посмотреть на предлагаемое решение? Вы можете принять мой ответ и поддержать его, если считаете, что он решает вашу проблему?