ক্যোয়ারী পারফরম্যান্সে একটি বিজোড়ের বিট ... আমার একটি ক্যোয়ারী চালানো দরকার যা ডকুমেন্টের মোট গণনা করে এবং সীমাবদ্ধ এবং অফসেট হতে পারে এমন একটি ফলাফল সেটও ফেরত দিতে পারে।
সুতরাং, আমার কাছে মোট 57 টি নথি রয়েছে এবং ব্যবহারকারী 20 দ্বারা অফসেটে 10 টি নথি চান।
আমি এটি করার 2 টি উপায় সম্পর্কে ভাবতে পারি, প্রথমে সমস্ত 57 টি নথির সন্ধান করা (অ্যারে হিসাবে প্রত্যাবর্তন করা), তারপরে অ্যারে ব্যবহার করে l স্লাইস তারা যে নথিগুলি চায় তা ফেরত দেয়। দ্বিতীয় বিকল্পটি হল 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()
পিএইচপি-তে ডিফল্ট ফাংশন গ্রহণ না করেlimit
বাskip
বিবেচনায় না নেওয়া হয় যদি না বলা হয় কেবল সীমাবদ্ধতার বিষয়ে একটি ক্যোয়ারী চালিয়ে যাওয়া এবং তারপরে গণনা পাওয়া সম্ভবত এখানে সবচেয়ে পারফরম্যান্ট সমাধান দেওয়া উচিত। তবে আপনি কীভাবে সেখানে 57 টি ডকুমেন্ট রাখবেন যদি আপনি বর্তমানে কী আছে তা গণনা করতে দুটি প্রশ্ন না করেন? আপনার কি স্থির নম্বর আছে যা কখনই বদলায় না? যদি না হয় তবে আপনাকে স্কিপ এবং সীমা উভয়ই করতে হবে তবে গণনা।