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:
- El oyente está activo, suscrito a la consulta, y.
- El documento se elimina de la colección, o
- El valor del campo
someiden el documento cambia.