sql >> Base de Datos >  >> NoSQL >> MongoDB

php mongodb encuentra la enésima entrada en la colección

Skip() no usa un índice de manera efectiva, por lo que no tendría sentido poner un índice en cualquier campo dentro de la colección.

Ya que desea skip() documentos enésimos, si el valor de skip() es bajo (depende de su sistema, pero normalmente menos de 100 000 filas en un análisis de colección completo), entonces podría estar bien. El problema es que normalmente no lo es. Mongo, incluso con un índice, deberá escanear todo el conjunto de resultados antes de poder omitirlo, lo que inducirá un escaneo completo de la colección sin importar cuál sea su consulta.

Si tuviera que hacer esto con frecuencia y de manera aleatoria, sería mejor usar una identificación incremental que combine otra colección con findAndModify para generar un número de documento preciso ( http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field ).

Sin embargo, esto genera problemas, debe mantener esta ID, especialmente cuando se producen eliminaciones. Un método para evitar esto es marcar los documentos como eliminados en lugar de eliminarlos realmente. Cuando consulta el documento exacto, omite las eliminaciones y limit() por uno que le permite obtener el siguiente documento más cercano a esa posición así:

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