Consulta de Firebase en Swift 5 por child/key
En mi base de datos, todas las imágenes publicadas tienen asociado un número creciente como clave.
Entonces, la primera imagen tiene la clave “1”, la segunda “2”, la milésima imagen tiene la clave “1000”.
Ahora quiero consultarlas ordenadas por orden ascendente, incluyendo paginación. Es decir, empezar con las 10 más recientes, luego continuar con las imágenes 11-20 y así sucesivamente.
¿Cómo puedo lograrlo sin utilizar una clave secundaria para realizar la consulta? Actualmente necesito darle una clave secundaria (por ejemplo “id” y luego la clave) para poder hacer la consulta. Como la base de datos está creciendo rápidamente, esto llevará a guardar datos innecesarios.
Ejemplo:
"root" {
"images" {
"1" {
"id" : 1
}
"2" {
"id" : 2
}
etc.
Quiero eliminar la parte del “id” y seguir siendo capaz de hacer la consulta y la paginación.
Actualmente sólo puedo hacer la consulta correctamente cuando incluyo la parte del “id”.
davy.ai
Una manera de lograr el ordenamiento y paginación sin usar un nodo hijo para la consulta es usar una combinación de los métodos
queryOrderedByKey()
yqueryLimited(toLast:)
proporcionados por Firebase Realtime Database para Swift. Aquí hay un ejemplo de código que demuestra su uso:En este ejemplo, primero definimos una referencia al nodo “images” en la base de datos. También especificamos la cantidad de imágenes a recuperar por página mediante la variable
pageSize
.Luego, definimos una variable
lastKey
que realiza un seguimiento de la clave de la última imagen recuperada en la página anterior. Inicialmente, se establece ennil
ya que no hay una página anterior para la primera consulta.El método
queryOrderedByKey()
ordena los resultados por claves ascendentes, y el métodoqueryEnding(atValue:)
excluye las imágenes que ya se habían recuperado en consultas anteriores especificandolastKey
.Finalmente, limitamos los resultados al
pageSize
usando el métodoqueryLimited(toLast:)
. El métodoobserveSingleEvent(of:)
se utiliza para recuperar los datos una vez, en lugar de observar continuamente los cambios.En la devolución de llamada, iteramos sobre el
snapshot
devuelto y manejamos cada imagen según sea necesario. Después de procesar los resultados, actualizamos la variablelastKey
con la clave de la última imagen en la página actual, para su uso en la próxima consulta.Al usar este enfoque, no se necesita un nodo hijo adicional de
id
en la base de datos. Las imágenes se ordenan por sus claves, y la paginación se logra ajustando el parámetrolastKey
con cada consulta.