sql >> Databáze >  >> NoSQL >> MongoDB

php mongodb najít n-tou položku v kolekci

Skip() nepoužívá index efektivně, takže umístění indexu na libovolné pole v kolekci by bylo zbytečné.

Protože chcete skip() n-tých dokumentů, pokud je hodnota skip() je nízká (závisí na vašem systému, ale normálně pod 100 000 řádků při úplném skenování kolekce), pak to může být v pořádku. Problém je, že normálně tomu tak není. Mongo, dokonce i s indexem, bude muset naskenovat celou sadu výsledků, než ji bude moci přeskočit, což vyvolá úplné skenování kolekce bez ohledu na to, co je ve vašem dotazu.

Pokud byste to dělali často a náhodnými způsoby, mohlo by být lepší použít zvyšující se ID kombinující jinou kolekci s findAndModify vytvořit přesné číslo dokumentu ( http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field ).

To však způsobuje problémy, toto ID musíte zachovat, zvláště když dojde k odstranění. Jedním ze způsobů, jak toho dosáhnout, je označit dokumenty jako odstraněné místo jejich skutečného odstranění. Při dotazu na přesný dokument vynecháte smazání a limit() o jeden, který vám umožní získat další nejbližší dokument k této pozici takto:

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


  1. Jak zkontrolovat, zda je index skrytý v MongoDB

  2. Spouštění mongod fork, CHYBA:podřízený proces se nezdařil, ukončeno s chybou číslo 1

  3. 10 nejlepších hostingových platforem MongoDB

  4. Mongodb:Dotaz na objekt json vnořený do pole