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

php mongodb намери n-ти запис в колекцията

Skip() не използва ефективно индекс, така че поставянето на индекс в което и да е поле в колекцията би било безсмислено.

Тъй като искате да skip() n-ти документи, ако стойността на skip() е ниско (зависи от вашата система, но обикновено под 100 000 реда при пълно сканиране на колекция), тогава може да е наред. Проблемът е, че обикновено не е така. Mongo, дори и с индекс, ще трябва да сканира целия набор от резултати, преди да може да го пропусне, което ще предизвика пълно сканиране на колекцията, без значение какво във вашата заявка.

Ако трябваше да правите това често и по произволни начини, може би е по-добре да използвате нарастващ идентификатор, комбиниращ друга колекция с findAndModify за създаване на точен номер на документ ( http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field).

Това обаче предизвиква проблеми, трябва да запазите този идентификатор, особено когато се изтриват. Един от методите за това е да маркирате документи като изтрити, вместо действително да ги изтривате. Когато правите заявка за точния документ, пропускате изтривания и limit() чрез едно, което ви позволява да получите следващия най-близък документ до тази позиция по следния начин:

$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. Mongoose разлика между .save() и използването на update()

  2. Разгръщане и поддръжка на MongoDB с помощта на Ansible

  3. премахнете _id от резултата от mongo

  4. Има ли начин за възстановяване на наскоро изтрити документи в MongoDB?

  5. Spring Data MongoDB - Annotation @CreatedDate не работи, докато се използва с персонализирано поле за идентификатор