sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta de rango para la paginación de MongoDB

Está perfectamente bien usar ObjectId() aunque su sintaxis para la paginación es incorrecta. Quieres:

 db.tweets.find().limit(50).sort({"_id":-1});

Esto dice que quieres tweets ordenados por _id valor en orden descendente y quiere los 50 más recientes. Su problema es el hecho de que la paginación es complicada cuando el conjunto de resultados actual está cambiando, por lo que en lugar de usar skip para la página siguiente, desea tomar nota del _id en el conjunto de resultados (el 50º _id más reciente valor y luego obtener la página siguiente con:

 db.tweets.find( {_id : { "$lt" : <50th _id> } } ).limit(50).sort({"_id":-1});

Esto le dará los próximos tweets "más recientes", sin que los nuevos tweets entrantes arruinen su paginación en el tiempo.

No hay absolutamente ninguna necesidad de preocuparse por si _id el valor se corresponde estrictamente con el orden de inserción:estará lo suficientemente cerca en un 99,999 %, y en realidad a nadie le importa en el segundo nivel qué tweet fue primero; incluso puede notar que Twitter muestra con frecuencia los tweets desordenados, simplemente no es tan crítico.

Si es crítico, entonces tendría que usar la misma técnica pero con "fecha de tweet" donde esa fecha tendría que ser una marca de tiempo, en lugar de solo una fecha.