MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Заявка за диапазон за пагинация на MongoDB

Напълно добре е да използвате ObjectId(), въпреки че синтаксисът ви за пагинация е грешен. Искате:

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

Това казва, че искате туитове, сортирани по _id стойност в низходящ ред и искате най-новите 50. Вашият проблем е фактът, че пагинацията е трудна, когато текущият набор от резултати се променя - така че вместо да използвате пропускане за следващата страница, искате да отбележите най-малкия _id в набора от резултати (50-тият най-нов _id стойност и след това вземете следващата страница с:

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

Това ще ви даде следващите „най-скорошни“ туитове, без нови входящи туитове да объркат пагинацията ви назад във времето.

Няма абсолютно никаква нужда да се притеснявате дали _id стойността стриктно съответства на реда на вмъкване - ще бъде 99,999% достатъчно близо и никой всъщност не се интересува на под-второ ниво кой туит е първи - може дори да забележите, че Twitter често показва туитове в нередност, просто не е толкова критично.

Ако е е критично, тогава ще трябва да използвате същата техника, но с „дата на туит“, където тази дата трябва да бъде времеви печат, а не просто дата.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Индекс на тройните съединения на Монго

  2. mongodb - Намерете документ с най-близката целочислена стойност

  3. MongoDB Намерете точно съвпадение на масива, но редът няма значение

  4. Какви параметри се предават на обратните извиквания на Mongoose

  5. MongoDB C# драйвер - Игнорирайте полетата при обвързване