Estoy trabajando en una consulta paginada de Firestore. Por lo tanto, me gustaría devolver el número total de resultados, para poder calcular el número total de páginas y mostrar un elemento de navegación de página adecuado.
Verá en los documentos a continuación que le recomiendan usar el último documento en queryResult para obtener la página siguiente usando startAfter(lastDoc) . Está bien.
Pero, ¿cómo puedo saber el número total de resultados? Digamos que tengo 10.000 resultados en esa consulta.
Si lo hago:
const q = query(collection(db, "cities"), orderBy("population")); // WITHOUT THE limit const querySnapshot = await getDocs(q); const total = querySnapshot.docs.length; // I CAN READ THE TOTAL HEREAl consultar todo, ya estoy pagando las 10.000 lecturas, ¿no? Aunque mi usuario solo quiera ver la primera página con 50 resultados, por ejemplo.
¿Hay alguna forma de saber el tamaño/total del resultado de una consulta sin pagar todas las lecturas?
De los documentos de Firestore:
Aparentemente esto no es posible.
Si consulta todo para saber el total, está pagando por todas esas lecturas. Es un hecho.
Acabo de volver a ver su video tutorial oficial sobre la paginación, y hay un montón de personas en los comentarios quejándose exactamente de la falta de esta función.
Puede configurar Cloud Functions (con disparadores de Firestore) para realizar un seguimiento de los tamaños de sus consultas si conoce los filtros (cláusula where ) que va a usar, pero eso debería ser engorroso con seguridad.
Si va por ese camino, también puede seguir adelante y configurar un servicio de búsqueda completo como ElasticSearch, Algolia o algo así.
Su video tutorial oficial sobre la paginación de Firestore: