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

php mongodb znajdź n-ty wpis w kolekcji

Skip() nie wykorzystuje skutecznie indeksu, więc umieszczanie indeksu w dowolnym polu w kolekcji byłoby bezcelowe.

Ponieważ chcesz skip() n-ty dokument, jeśli wartość skip() jest niski (w zależności od systemu, ale zwykle poniżej 100 tys. wierszy przy pełnym skanowaniu kolekcji), to może być OK. Problem w tym, że normalnie tak nie jest. Mongo, nawet z indeksem, będzie musiał przeskanować cały zestaw wyników, zanim będzie mógł go pominąć, co spowoduje pełne skanowanie kolekcji bez względu na to, co w zapytaniu.

Gdybyś miał to robić często i losowo, lepiej byłoby użyć rosnącego identyfikatora łączącego inną kolekcję z findAndModify aby uzyskać dokładny numer dokumentu ( http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field ).

To jednak powoduje problemy, musisz zachować ten identyfikator, zwłaszcza gdy wystąpią usunięcia. Jedną z metod jest oznaczenie dokumentów jako usuniętych zamiast faktycznego ich usuwania. Gdy pytasz o dokładny dokument, który pomijasz, usuwasz i limit() o jeden, co pozwala na uzyskanie następnego dokumentu najbliższego tej pozycji, w ten sposób:

$cur = $db->collection->find(array('ai_id' => array('$gt' => 403454), 'deleted' => 0))->limit(1);
$cursor->next();
$doc = $cursor->current();


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy istnieje sposób na odzyskanie ostatnio usuniętych dokumentów w MongoDB?

  2. Jak mogę obiecać natywny sterownik JavaScript MongoDB za pomocą programu bluebird?

  3. Pobieranie zagnieżdżonych danych z MongoDB do ramki danych Pandas

  4. 3 sposoby na uzyskanie tygodnia z daty w MongoDB

  5. Grupuj według sumy mongodb