Có một chút kỳ lạ về hiệu suất truy vấn ... Tôi cần chạy một truy vấn có tổng số tài liệu và cũng có thể trả về một tập kết quả có thể được giới hạn và bù đắp.
Vì vậy, tôi có tổng cộng 57 tài liệu và người dùng muốn 10 tài liệu bù lại 20.
Tôi có thể nghĩ ra 2 cách để làm điều này, đầu tiên là truy vấn cho tất cả 57 tài liệu (trả về dưới dạng mảng), sau đó sử dụng array.slice trả về tài liệu mà họ muốn. Tùy chọn thứ hai là chạy 2 truy vấn, truy vấn đầu tiên sử dụng phương pháp 'đếm' gốc của mongo, sau đó chạy truy vấn thứ hai bằng cách sử dụng trình tổng hợp $ gốc và $ bỏ qua của mongo.
Bạn nghĩ cái nào sẽ mở rộng quy mô tốt hơn? Thực hiện tất cả trong một truy vấn hay chạy hai truy vấn riêng biệt?
Biên tập:
// 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()
chức năng mặc định trong PHP không tính đếnlimit
hoặc không tínhskip
đến trừ khi được yêu cầu như vậy chỉ cần chạy một truy vấn giới hạn và bỏ qua và sau đó nhận được số lượng sẽ đưa ra giải pháp hiệu quả nhất ở đây có lẽ. Tuy nhiên, làm thế nào bạn sẽ biết có 57 tài liệu nếu bạn không thực hiện hai truy vấn để đếm những gì hiện có ở đó? Bạn có một số tĩnh không bao giờ thay đổi? Nếu không, bạn sẽ cần phải thực hiện cả bỏ qua và giới hạn sau đó đếm.