쿼리 성능에 대한 약간의 이상한 점 ... 총 문서 수를 수행하는 쿼리를 실행하고 제한 및 오프셋 가능한 결과 집합을 반환 할 수도 있습니다.
그래서 총 57 개의 문서가 있고 사용자는 10 개의 문서를 20으로 오프셋하기를 원합니다.
이 작업을 수행하는 두 가지 방법을 생각할 수 있습니다. 먼저 57 개 문서 (배열로 반환 됨)를 모두 쿼리 한 다음 array.slice를 사용하여 원하는 문서를 반환합니다. 두 번째 옵션은 mongo의 기본 'count'메소드를 사용하여 두 번째 쿼리를 실행 한 다음 mongo의 기본 $ limit 및 $ skip 집계자를 사용하여 두 번째 쿼리를 실행하는 것입니다.
어느 것이 더 잘 확장 될 것이라고 생각하십니까? 모든 것을 하나의 쿼리로 수행하거나 두 개의 개별 쿼리를 실행합니까?
편집하다:
// 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()
하지 못하지만 PHP 의 기본 기능은 한 번의 제한 쿼리를 실행하고 건너 뛰고 카운트를 얻는 것이 아마도 여기에서 가장 성능이 좋은 솔루션을 제공해야한다고 말하지 않는 한 고려limit
하거나skip
고려 하지 않습니다 . 그러나 현재있는 항목을 계산하기 위해 두 개의 쿼리를 수행하지 않으면 57 개의 문서가 있다는 것을 어떻게 알 수 있습니까? 변하지 않는 고정 번호가 있습니까? 그렇지 않은 경우 건너 뛰기와 제한을 모두 수행 한 다음 카운트를 수행해야합니다.