MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consulta de intervalo para paginação do MongoDB


Não há problema em usar ObjectId() embora sua sintaxe para paginação esteja errada. Você quer:
 db.tweets.find().limit(50).sort({"_id":-1});

Isso diz que você quer os tweets classificados por _id valor em ordem decrescente e você deseja os 50 mais recentes. Seu problema é o fato de que a paginação é complicada quando o conjunto de resultados atual está mudando - então, em vez de usar pular para a próxima página, você deseja anotar o menor _id no conjunto de resultados (o 50º _id mais recente value e, em seguida, obter a próxima página com:
 db.tweets.find( {_id : { "$lt" : <50th _id> } } ).limit(50).sort({"_id":-1});

Isso lhe dará os próximos tweets "mais recentes", sem novos tweets de entrada atrapalhando sua paginação no tempo.

Não há absolutamente nenhuma necessidade de se preocupar se _id O valor é estritamente correspondente à ordem de inserção - será 99,999% próximo o suficiente, e ninguém realmente se importa no nível sub-segundo qual tweet veio primeiro - você pode até notar que o Twitter frequentemente exibe tweets fora de ordem, mas não é tão crítico.

Se é crítico, então você teria que usar a mesma técnica, mas com "data do tweet", onde essa data teria que ser um carimbo de data/hora, em vez de apenas uma data.