Etwas seltsam in Bezug auf die Abfrageleistung ... Ich muss eine Abfrage ausführen, die eine Gesamtanzahl von Dokumenten ausführt und auch eine Ergebnismenge zurückgeben kann, die begrenzt und versetzt werden kann.
Ich habe also insgesamt 57 Dokumente und der Benutzer möchte 10 Dokumente, die um 20 versetzt sind.
Ich kann mir zwei Möglichkeiten vorstellen, dies zu tun: Zuerst werden alle 57 Dokumente abgefragt (als Array zurückgegeben) und dann mit array.slice die gewünschten Dokumente zurückgegeben. Die zweite Option besteht darin, zwei Abfragen auszuführen, die erste mit der nativen 'count'-Methode von mongo, und dann eine zweite Abfrage mit den nativen Aggregatoren $ limit und $ skip von mongo auszuführen.
Was denkst du würde besser skalieren? Alles in einer Abfrage erledigen oder zwei separate ausführen?
Bearbeiten:
// 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()
nicht sicher, aber die Standardfunktion in PHP berücksichtigtlimit
oderskip
berücksichtigt sie nur, wenn Sie dazu aufgefordert werden. Wenn Sie nur eine Abfrage von Limit ausführen und überspringen und dann die Zählung abrufen, sollte dies hier wahrscheinlich die leistungsstärkste Lösung sein. Wie können Sie jedoch feststellen, dass es 57 Dokumente gibt, wenn Sie nicht zwei Abfragen durchführen, um zu zählen, was aktuell vorhanden ist? Haben Sie eine statische Nummer, die sich nie ändert? Wenn nicht, müssen Sie sowohl überspringen als auch begrenzen und dann zählen.