Este código escucha las actualizaciones de la consulta dada y obtiene todos los documentos de inmediato.
import { collection, query, where, onSnapshot } from "firebase/firestore"; const q = query(collection(db, "posts"), where("character_count", ">", 1)); onSnapshot(q, (querySnapshot) => { querySnapshot.forEach((doc) => { console.log(doc.data()); }); }); Quiero obtener todos los eventos de la consulta "where character_count> 1", pero sin obtener inmediatamente todos los documentos de las posts de la colección que podrían obtener millones de documentos...
¿Es posible hacer esto en FireStore?
Los oyentes de Firestore siempre obtendrán todos los documentos que coincidan con la consulta en la primera devolución de llamada. No hay manera de cambiar ese comportamiento. No puede decirle que solo le dé documentos "nuevos".
Si desea introducir el concepto de documentos "nuevos", deberá agregar un campo de marca de tiempo a los documentos de la colección y usarlo como filtro en la consulta. El problema es que la consulta también tendrá que proporcionar una marca de tiempo en la aplicación del cliente para usarla para filtrar, y esa marca de tiempo dependerá del reloj de esa máquina, que podría no coincidir con el reloj que usa el software que está agregando los documentos.
En resumen, Firestore no está realmente diseñado para ser un servicio de mensajería que permita a los clientes saber qué nuevos "eventos" (documentos) pasan por el sistema. Hay otros productos en la nube que hacen eso, que normalmente se denominan colas de mensajes opub/sub .