Tengo una lista paginada de publicaciones, donde mi cursor se vuelve a calcular en cada búsqueda, asignándole el último documento QuerySnapshot:
// Calculate the new startAfter if (querySnapshot.size) { startAfter = querySnapshot.docs[querySnapshot.docs.length - 1]; }De alguna manera, usar instantáneas de documentos como cursores es una de las formas más "seguras" de evitar romper las paginaciones.
Estoy pensando en optimizar algunas partes de mi aplicación con desnormalizaciones. Por ejemplo, como cada usuario de mi aplicación puede cargar infinitas publicaciones que se muestran en sus perfiles de 10 en 10, sería una buena idea agregar las últimas 10 publicaciones de usuarios (desnormalización) al documento del usuario (un campo de matriz).
Con esto, evito hacer la búsqueda de las primeras 10 publicaciones de cada perfil visitado. Pero... ¿cómo asigno el primer cursor startAfter? Quiero decir, ¿es posible escribir una instantánea de documento en un documento o algo así para obtener el mismo comportamiento?
Si observa la documentación de startAfter , verá que hay dos sobrecargas:
startAfter ( snapshot : DocumentSnapshot < any > ) : Query < T >Crea y devuelve una nueva
Queryque comienza después del documento proporcionado (exclusivo). La posición inicial es relativa al orden de la consulta. El documento debe contener todos los campos proporcionados enorderByde esta consulta.Parámetros
snapshot:DocumentSnapshot<any>La instantánea del documento para comenzar después.
Y
startAfter ( ... fieldValues : any [] ) : Query < T >Crea y devuelve una nueva
Queryque comienza después de los campos proporcionados en relación con el orden de la consulta. El orden de los valores de campo debe coincidir con el orden de las cláusulas order by de la consulta.Parámetros
Rest ...fieldValues: any[]Los valores de campo para iniciar esta consulta después, en el orden de la consulta.
Como no tiene una DocumentSnapshot , puede usar la segunda sobrecarga y pasar los valores de campo relevantes.