MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Interrogazione dell'intervallo per l'impaginazione di MongoDB

Va benissimo usare ObjectId() anche se la tua sintassi per l'impaginazione è sbagliata. Vuoi:

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

Questo dice che vuoi che i tweet siano ordinati per _id valore in ordine decrescente e vuoi il 50 più recente. Il tuo problema è il fatto che l'impaginazione è complicata quando il set di risultati corrente cambia, quindi invece di usare skip per la pagina successiva, vuoi prendere nota del _id nel set di risultati (il cinquantesimo _id più recente valore e quindi ottenere la pagina successiva con:

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

Questo ti darà i prossimi tweet "più recenti", senza che i nuovi tweet in arrivo rovinino la tua paginazione indietro nel tempo.

Non c'è assolutamente bisogno di preoccuparsi se _id il valore è strettamente corrispondente all'ordine di inserimento:sarà abbastanza vicino al 99,999% e a nessuno importa al livello inferiore del secondo quale tweet sia arrivato per primo:potresti anche notare che Twitter mostra spesso i tweet fuori ordine, ma non è così critico.

Se lo è critico, dovresti usare la stessa tecnica ma con "data del tweet" in cui quella data dovrebbe essere un timestamp, piuttosto che solo una data.