Базовая реализация порядка по полю и метода подсчета

#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 Привет, у тебя было время посмотреть на предлагаемое решение? Вы можете принять мой ответ и поддержать его, если считаете, что он решает вашу проблему?