Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

271
Views
Paginación de Firestore: cómo consultar la última página

Creé una API POST pública y tranquila para buscar usando la función Firebase y firestore:

 app.post("/", async (req, res) => { const { eventIds, queryString, startAtIndex, limit } = req.body; let query = firestore() .collection("IndexedEcImage_test") .where("eventId", 'in', eventIds); if (queryString) { query = query.where("generatedSearchKeys", "array-contains", queryString); } query = query.orderBy("timestamp") if (startAtIndex) { query = query.startAfter(startAtIndex); } const snapshot = await query.limit(limit).get(); const results = snapshot.docs.map(doc => doc.data()); res.status(200).send({ indexForNextPage: results[results.length - 1].timestamp, data: results }); });

El cuerpo solicita:

 { "eventIds": [ "9m6k89aOlqeXpaJ3oZhW1" ], "queryString": "ABC", "startAtIndex": 1637128385472, "limit": 2 }

El resultado es así: { "indexForNextPage": 1637128385472, "data": [{...},{....}] }

Por ejemplo: la colección "IndexedEcImage_test" tiene 5 documentos. Esperaba que la paginación fuera así:

Página 1: primeros 2 documentos => Página 2: próximos 2 documentos => Última página: el último documento

El indexForNextPage en la salida se usa para obtener la página siguiente, pero cuando se trata de la última página, me dio un tiempo de espera. Supongo que el límite va más allá del número de documentos restantes. La cantidad de documentos restantes puede cambiar de manera diferente según el total de documentos o el límite. ¿Existe una forma general de obtener la última página sin contar todos los documentos?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Empezaré recomendándote leer estanota y la guía de actualización . En caso de que esté usando un tutorial antiguo y haya fusionado accidentalmente las dos versiones, es un error común que podría causar problemas. Si ese no es el caso, y está optando por usar la versión 8, encontré dos preguntas antiguas usando esa versión SDK que podrían ayudarlo. En este , el consejo es...

Para detectar si hay más páginas para cargar, deberá solicitar un elemento adicional. Entonces, dado que parece mostrar 2 elementos por página, debe solicitar 3 elementos y mostrar solo dos de ellos. Si obtiene un tercer elemento, sabrá que hay una página adicional.

y la otra publicación contiene este código que en mi opinión podría ser útil:

 $("#js-previous").on('click', function () { $('#employee-table tbody').html(''); var previous = db.collection("employees") .endBefore(firstVisible) .limitToLast(3); previous.get().then(function (documentSnapshots) { documentSnapshots.docs.forEach(doc => { renderEmployee(doc); }); }); });

Sin embargo, si considera usar la última versión 9 SDK, una vez que haya realizado una migración, esta sería una forma sugerida de Paginar una consulta para obtener el último documento en un lote. Puede comparar esto con la versión 8 SDK y ver las diferencias en el código que usan para obtener el último elemento:

 var first = db.collection("cities") .orderBy("population") .limit(25); return first.get().then((documentSnapshots) => { // Get the last visible document var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length-1]; console.log("last", lastVisible); // Construct a new query starting at this document, // get the next 25 cities. var next = db.collection("cities") .orderBy("population") .startAfter(lastVisible) .limit(25); });

Nota: Todos los ejemplos de código usan la versión 8 del SDK.

El video en la misma página es muy informativo y puede ser muy útil para comprender cómo funciona la paginación.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!