Saltar al contenido

Cómo obtener un recuento de la cantidad de documentos en una colección con Cloud Firestore

Solución:

Actualmente tienes 3 opciones:

Opción 1: lado del cliente

Este es básicamente el enfoque que mencionaste. Seleccione todo de la colección y cuente con el lado del cliente. Esto funciona lo suficientemente bien para conjuntos de datos pequeños, pero obviamente no funciona si el conjunto de datos es más grande.

Opción 2: mejor esfuerzo en tiempo de escritura

Con este enfoque, puede usar Cloud Functions para actualizar un contador para cada adición y eliminación de la colección.

Esto funciona bien para cualquier tamaño de conjunto de datos, siempre que las adiciones / eliminaciones solo ocurran a una velocidad menor o igual a 1 por segundo. Esto le da un solo documento para leer para darle la casi actual contar inmediatamente.

Si necesita exceder 1 por segundo, debe implementar contadores distribuidos según nuestra documentación.

Opción 3: tiempo de escritura exacto

En lugar de usar Cloud Functions, en su cliente puede actualizar el contador al mismo tiempo que agrega o elimina un documento. Esto significa que el contador también estará actualizado, pero deberá asegurarse de incluir esta lógica en cualquier lugar donde agregue o elimine documentos.

Al igual que la opción 2, deberá implementar contadores distribuidos si desea exceder por segundo

Las agregaciones son el camino a seguir (las funciones de firebase parecen la forma recomendada de actualizar estas agregaciones, ya que el lado del cliente expone información al usuario que quizás no desee que se exponga) https://firebase.google.com/docs/firestore/solutions/aggregation

Otra forma (NO recomendada) que no es buena para listas grandes e implica descargar la lista completa: res.size como este ejemplo:

   db.collection("logs")
      .get()
      .then((res) => console.log(res.size));

Si usa AngulareFire2, puede hacerlo (asumiendo private afs: AngularFirestore se inyecta en su constructor):

this.afs.collection(myCollection).valueChanges().subscribe( values => console.log(values.length));

Aquí, values es una matriz de todos los elementos en myCollection. No necesita metadatos para poder usar valueChanges() método directamente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *