Búsqueda de sitios web

typescript - Firestore snapshotChanges DocumentChangeType "removed" nunca se envía


Estoy consultando una colección de Firestore usando una cláusula where y estoy suscrito a snapshotChanges. Según la documentación, debería recibir un evento por cada elemento que se agregue, modifique o elimine.

Recibo bien los documentos añadidos y modificados, pero nunca recibo los eliminados.

Aquí hay un ejemplo de mi código:

this.db
      .collection<Test>('test', ref => ref.where('someid', '==', someid))
      .snapshotChanges()
      .subscribe(async snapshot => {
        for (const element of snapshot) {
          switch (element.type) {
            case 'added':
              // Works fine
              break;
            case 'modified':
              // Works fine
              break;
            case 'removed':
              // Never triggered
              break;
          }
        }
      });

Supongo que es por el hecho de que estoy usando un where. ¿Alguien se ha encontrado con esto?

ACTUALIZACIÓN: 14-10-2020

Después de más pruebas, parece ser un problema únicamente con AngularFirestore y no con Firestore en sí. Mientras tanto, como solución temporal, utilizo AngularFirestore.firestore.onSnapshot directamente.

ACTUALIZACIÓN: 04-11-2020 Resulta que con AngularFirestore necesitas usar stateChanges para obtener el comportamiento que estaba buscando. Espero que esto pueda ayudar a alguien.

Respuesta #1

Resulta que con AngularFirestore necesitas usar stateChanges para obtener el comportamiento que estaba buscando.

Aquí está la documentación que explica la diferencia entre snapshotChanges y stateChanges: https://github.com/angular/angularfire/blob/master/docs/firestore/collections.md

Respuesta #2

Un oyente recibirá eventos removed para los documentos que se eliminen de los resultados de la consulta mientras ese oyente esté activo.

Entonces, en tu caso, eso significa que recibirás el evento si:

  1. El oyente está activo, suscrito a la consulta, y.
  2. El documento se elimina de la colección, o
  3. El valor del campo someid en el documento cambia.

Artículos relacionados