クエリのパフォーマンスに関して少し奇妙なことです...ドキュメントの総数を実行し、制限およびオフセットできる結果セットを返すこともできるクエリを実行する必要があります。
したがって、合計57のドキュメントがあり、ユーザーは10のドキュメントを20でオフセットしたいと考えています。
これを行うには2つの方法が考えられます。1つは57個のドキュメントすべて(配列として返される)をクエリし、次にarray.sliceを使用して必要なドキュメントを返すことです。2番目のオプションは、2つのクエリを実行することです。最初のクエリはmongoのネイティブの「count」メソッドを使用し、次にmongoのネイティブの$ limitおよび$ skipアグリゲーターを使用して2番目のクエリを実行します。
どちらがより適切にスケーリングすると思いますか?すべてを1つのクエリで実行しますか、それとも2つの別々のクエリを実行しますか?
編集:
// 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
考慮にこれだけの限界の1つのクエリを実行するに告げなければスキップして、数を取得することは、おそらくここで最もパフォーマンスの高いソリューションを与える必要があります。しかし、現在そこにあるものを数えるために2つのクエリを実行しない場合、57のドキュメントがあることをどのように知ることができますか?決して変わらない静的な番号はありますか?そうでない場合は、スキップと制限の両方を実行してからカウントする必要があります。