Estoy tratando de crear un sitio web de blog con paginación usando MongoDB y expresar dónde los usuarios podrán obtener páginas con límite en la cantidad de publicaciones en cada página ordenadas de más reciente a más antigua
Mi implementación de la paginación es la siguiente...
Por ejemplo, si un cliente desea realizar una solicitud para obtener publicaciones para la tercera página, con un tamaño de página de 5 publicaciones por página, realizará la siguiente solicitud al servidor
GET// {serverUrl}/posts?pagesize=5&pagenumber=3
este es el código en node/express
app.get('/posts', async function(req, res, next) { const pagesize = req.query.pagesize || 0; //5 const pagenumber = req.query.pagenumber || 0; //3 const postsToSkip = (pagenumber -1) * pagesize; //10 try { // skip 10 and limit 5 const posts = await posts.find().sort({date: -1}).skip(postsToSkip).limit(pagesize) return res.status(200).send(posts.toArray()); } catch(error) { return res.status(500).send('something went wrong'); } });El código funciona perfectamente bien, el problema es el siguiente
para simplificar, lea detenidamente lat's, digamos que hay 100 publicaciones en la base de datos, y todas tienen una identificación 1-100, por lo que la publicación más antigua tiene una identificación de 1 y la publicación más nueva tiene una identificación de 100
digamos que un usuario va al sitio web de publicaciones de blog (creado por React, por ejemplo), React realiza una solicitud al servidor
GET// {serverUrl}/posts?pagesize=5&pagenumber=1
Luego, el servidor realiza una solicitud a MongoDB para obtener las 5 publicaciones más recientes (ID 96-100)
posts.find().skip(0).limit(5)
y luego lo envía de regreso a React, y reaccionar los muestra en la página, ahora si, por ejemplo, antes de que el usuario vaya a la página siguiente, un usuario diferente agrega 5 publicaciones nuevas a la base de datos (todas obtienen ID de 101 -105), ahora cuando el usuario vaya a la página siguiente, React hará una solicitud al servidor para obtener la segunda página
GET// {serverUrl}/posts?pagesize=5&pagenumber=2
el servidor ahora hará una solicitud a MongoDB para obtener la página número 2 posts.find().skip(5).limit(5) pero ahora la segunda página será idéntica a la primera página, ya que cuando el usuario visitó el sitio web por primera vez y estaba en la primera página, las 5 publicaciones más nuevas tenían ID de 96-100, pero cuando fue a la segunda página después de agregar las 5 publicaciones, las 5 publicaciones más nuevas tenían ID 101-105 y las segundas 5 publicaciones más nuevas serán ser las publicaciones con ID de 96-100 iguales a las que estaban en la primera página cuando el usuario visitó el sitio web por primera vez, lo que hace que la segunda página sea idéntica a la primera página
Me gustaría saber si hay alguna implementación para superar este comportamiento extraño.
Esta es la primera pregunta que publico en stackoverflow.com, me gustaría escuchar sus comentarios...
muchas gracias 😊😊😊