MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

php mongodb encontra a enésima entrada na coleção


Skip() não usa um índice efetivamente, então colocar um índice em qualquer campo dentro da coleção seria inútil.

Como você deseja skip() nth documentos, se o valor de skip() for baixo (depende do seu sistema, mas normalmente abaixo de 100 mil linhas em uma varredura de coleção completa), então pode estar OK. O problema é que normalmente não é. O Mongo, mesmo com um índice, precisará verificar todo o conjunto de resultados antes de poder ignorá-lo, o que induzirá uma verificação completa da coleção, não importa o que esteja em sua consulta.

Se você fizer isso com frequência e de maneira aleatória, talvez seja melhor usar um ID de incremento combinando outra coleção com findAndModify para produzir um número de documento preciso ( http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field ).

No entanto, isso induz problemas, você deve manter esse ID especialmente quando ocorrerem exclusões. Um método para contornar isso é marcar os documentos como excluídos em vez de excluí-los de fato. Quando você consulta o documento exato, você omite exclusões e limit() por um, permitindo que você obtenha o próximo documento mais próximo dessa posição, assim:
$cur = $db->collection->find(array('ai_id' => array('$gt' => 403454), 'deleted' => 0))->limit(1);
$cursor->next();
$doc = $cursor->current();