Czy robię to dobrze? Poszedłem do starego kodu PHP w/MySQL i udało mi się go uruchomić, ale zastanawiam się, czy jest o wiele "czystszy" i "szybszy" sposób na osiągnięcie tego.Jak poprawnie obsługiwać zapytania dotyczące stronicowania za pomocą mongodb i php?
Najpierw musiałbym uzyskać całkowitą liczbę „dokumentów”
$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);
// Zapytanie zapełnić tablicę więc mogę wyświetlić z paginacji
$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));
Moje pytanie brzmi, czy mogę uruchomić zapytanie w jednym ujęciu? Zasadniczo dwukrotnie uruchamiam to samo zapytanie, z wyjątkiem tego, że po raz drugi przekazuję tę wartość, aby pomijać rekordy.
- Nowy kod ...
Ok, chyba że ktoś zna inny sposób to zrobić (jeśli to możliwe), mam zamiar powiedzieć, że nie jest to wykonalne. Powiedziawszy to, zmieniłem sposób, w jaki prowadzę moje zapytania za pośrednictwem mongodb, co przyniosło lepiej wyglądający kod. ;-) Próbowałem zminimalizować podróże do DB, ale mam nadzieję, że to nie potrwa. Moją drugą próbą było policzenie liczby elementów w tablicy, ale szybko okazało się, że to nie zadziała, ponieważ parametry $ limit o wartości $ & $ podadzą całkowitą liczbę dokumentów.
$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);
nie powinien pominąć przyjść przed limitem? – Chamila