¿Estoy haciendo esto bien? Fui a ver un viejo código PHP con MySQL y me las he arreglado para hacer que funcione, sin embargo, me pregunto si hay una manera mucho más "limpia" y "más rápida" de lograr esto.¿Cómo manejar las consultas de paginación correctamente con mongodb y php?
Primero tendría que obtener el número total de "documentos"
$total_documents = $collection->find(array("tags" => $tag,
"seeking" => $this->session->userdata('gender'),
"gender" => $this->session->userdata('seeking')))->count();
$skip = (int)($docs_per_page * ($page - 1));
$limit = $docs_per_page;
$total_pages = ceil($total_documents/$limit);
// consulta para poblar matriz de modo que puede mostrar con paginación
$data['result'] = $collection->find(array("tags" => $tag,
"seeking" => $this->session->userdata('gender'),
"gender" => $this->session->userdata('seeking')))->limit($limit)->skip($skip)->sort(array("_id" => -1));
Mi pregunta es, ¿Puedo ejecutar la consulta de una vez? Básicamente ejecuto la misma consulta dos veces, excepto la segunda vez que paso el valor para saltar entre registros.
- Nuevo código ...
Ok, a menos que alguien sabe de otra manera de hacer esto (si es posible), voy a decir que no es factible. Dicho esto, cambié la manera en que realizo mis consultas a través de mongodb, lo que arrojó un código de mejor apariencia. ;-) Estaba tratando de minimizar los viajes a la base de datos, pero espero que esto no tenga un impacto en el rendimiento. Mi otro intento fue contar la cantidad de elementos en la matriz, pero me di cuenta rápidamente de que no funcionaría, ya que los $ límite & $ omitirían los parámetros darían su número total de documentos.
$skip = (int)($docs_per_page * ($page - 1));
$limit = $docs_per_page;
$query = array("loc" => array('$near' => array('lat' => $latitude, 'lon' => $longitute)),
"tags" => $tag, "seeking" => $this->session->userdata('gender'),
"gender" => $this->session->userdata('seeking'));
$fields = array("username", "zipcode", "tags", "birth_date");
$total_documents = $collection->find($query, array("_id"))->count();
$data['result'] = $collection->find($query, $fields)->limit($limit)->skip($skip);
no debe saltar venir antes de límite? – Chamila