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.