Trochę dziwne pytanie o wydajność zapytania ... Muszę uruchomić zapytanie, które oblicza całkowitą liczbę dokumentów i może również zwrócić zestaw wyników, który można ograniczyć i przesunąć.
Mam więc w sumie 57 dokumentów, a użytkownik chce, aby 10 dokumentów zostało przesuniętych o 20.
Przychodzą mi do głowy 2 sposoby na zrobienie tego, najpierw zapytanie o wszystkie 57 dokumentów (zwrócone jako tablica), a następnie użycie array.slice zwróci żądane dokumenty. Drugą opcją jest uruchomienie 2 zapytań, pierwszego przy użyciu natywnej metody „count” mongo, a następnie uruchomienie drugiego zapytania przy użyciu natywnych agregatorów $ limit i $ skip mongo.
Jak myślisz, które będzie lepiej skalowane? Robisz to wszystko w jednym zapytaniu lub uruchamiasz dwa oddzielne?
Edytować:
// 1 query
var limit = 10;
var offset = 20;
Animals.find({}, function (err, animals) {
if (err) {
return next(err);
}
res.send({count: animals.length, animals: animals.slice(offset, limit + offset)});
});
// 2 queries
Animals.find({}, {limit:10, skip:20} function (err, animals) {
if (err) {
return next(err);
}
Animals.count({}, function (err, count) {
if (err) {
return next(err);
}
res.send({count: count, animals: animals});
});
});
count()
funkcja w PHP nie bierzelimit
lubskip
pod uwagę, chyba że powiedziano tak właśnie działa jedno zapytanie limitu i pominąć, a następnie coraz licznik powinien dać najbardziej wydajnych rozwiązań tu prawdopodobnie. Jak jednak dowiesz się, że istnieje 57 dokumentów, jeśli nie wykonasz dwóch zapytań, aby policzyć to, co aktualnie tam jest? Czy masz stałą liczbę, która nigdy się nie zmienia? Jeśli nie, będziesz musiał zrobić zarówno pominięcie, jak i ograniczenie, a następnie zliczanie.