MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zapytanie o zakres dla paginacji MongoDB

Używanie ObjectId() jest w porządku, chociaż twoja składnia dla stronicowania jest nieprawidłowa. Chcesz:

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

Oznacza to, że chcesz, aby tweety były sortowane według _id wartość w kolejności malejącej i chcesz mieć najnowsze 50. Twoim problemem jest fakt, że stronicowanie jest trudne, gdy bieżący zestaw wyników się zmienia - więc zamiast używać pomijania dla następnej strony, chcesz zanotować najmniejszy _id w zestawie wyników (50. najnowszy _id wartość, a następnie przejdź do następnej strony z:

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

Dzięki temu otrzymasz kolejne „najnowsze” tweety, bez nowych przychodzących tweetów, które zepsują twoją paginację w czasie.

Absolutnie nie musisz się martwić, czy _id wartość ściśle odpowiada zamówieniu reklamowemu – będzie wystarczająco blisko 99,999% i nikogo nie obchodzi, który tweet był pierwszy – możesz nawet zauważyć, że Twitter często wyświetla tweety niewłaściwie, po prostu nie jest to tak istotne.

Jeśli jest krytyczne, wtedy musiałbyś użyć tej samej techniki, ale z „datą tweet”, gdzie ta data musiałaby być znacznikiem czasu, a nie tylko datą.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Multikolekcje, wielodokumentowe „transakcje” w MongoDB

  2. Filtry tablicy Mongodb 3.6.0-rc3 nie działają?

  3. Konwertowanie BSON Type ObjectId na JSON (przechowywanie w Mongodb) — Java

  4. MongoDB $acos

  5. Limit rozmiaru pojedynczego dokumentu MongoDB wynosi 16 MB