Usando Firestore Web API v9, supongamos que tengo un detector de colección y un detector de documentos para un documento en esa colección. Aparece una actualización para ese documento.
Dos preguntas:
Ejemplo:
collectionSnapshots(collection(firestore, 'people')).subscribe(...); docSnapshots(doc(firestore, 'people/john')).subscribe(...);¿Me cobran por dos lecturas?
Se le cobra por la cantidad de documentos que se leen, independientemente de la cantidad de oyentes que tenga. Si la colección de 'personas' tiene 50 documentos y el oyente devuelve 50 documentos, se le cobrarán 50 lecturas. Cualquier actualización recibida más tarde se cobrará 1 lectura por actualización.
¿El SDK devuelve los datos dos veces o los envía una vez y envía una actualización dos veces?
Cuando se agrega el oyente, devolverá todos los documentos que coincidieron con su consulta (en este caso, la colección completa de personas). Después de eso, siempre que se agregue/actualice/elimine un documento, el oyente recibirá la actualización.
Sí, si tiene un oyente en la colección de personas y otro oyente en un documento de esa colección. Ambos oyentes obtendrán datos actualizados y se le cobrarán 2 lecturas por esa única actualización. Sin embargo, no necesita otro oyente solo para un solo documento. Puede leer la identificación del documento de los cambios recibidos y actualizarla en su aplicación web.
import { collection, query, where, onSnapshot } from "firebase/firestore"; const q = query(collection(db, "people")); const unsubscribe = onSnapshot(q, (snapshot) => { snapshot.docChanges().forEach((change) => { if (change.type === "modified") { // a document in people collection is modified const docId = change.doc.id; const docData = change.doc.data(); } }); });