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

Områdeforespørgsel til MongoDB-paginering

Det er helt fint at bruge ObjectId(), selvom din syntaks til paginering er forkert. Du ønsker:

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

Dette siger, at du vil have tweets sorteret efter _id værdi i faldende rækkefølge, og du vil have den seneste 50. Dit problem er det faktum, at paginering er vanskelig, når det aktuelle resultatsæt ændrer sig - så i stedet for at bruge spring til næste side, vil du notere den mindste _id i resultatsættet (det 50. seneste _id værdi og få den næste side med:

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

Dette vil give dig de næste "seneste" tweets, uden at nye indkommende tweets ødelægger din paginering tilbage gennem tiden.

Der er absolut ingen grund til at bekymre sig om, hvorvidt _id værdien er strengt svarende til indsættelsesrækkefølgen - den vil være 99,999 % tæt nok på, og ingen er faktisk ligeglad på det sub-sekund niveau, hvilket tweet der kom først - du kan endda bemærke, at Twitter ofte viser tweets i uorden, det er bare ikke så kritisk.

Hvis det er kritisk, så skal du bruge den samme teknik, men med "tweet-dato", hvor datoen skal være et tidsstempel i stedet for blot en dato.



  1. MongoDB via Mongoose JS - Hvad er findByID?

  2. Redis på Spark:Opgaven kan ikke serialiseres

  3. Redis cache vs brug af hukommelse direkte

  4. Brug af StackExchange.Redis i en ASP.NET Core Controller