সমাধানের জন্য পটভূমি
যেমনটি মঙ্গুজের ডকুমেন্টেশনে এবং বেনজামিনের উত্তরে Model.count()
বলা হয়েছে , পদ্ধতিটি হ্রাস করা হয়েছে। পরিবর্তে ব্যবহারের পরিবর্তে count()
বিকল্পগুলি নিম্নলিখিত:
Model.countDocuments(filterObject, callback)
কোনও সংগ্রহের মধ্যে কতগুলি নথি ফিল্টারটির সাথে মেলে। ফিল্টার হিসাবে একটি খালি বস্তু {Pass পাস করা একটি সম্পূর্ণ সংগ্রহের স্ক্যান চালায়। সংগ্রহটি বড় হলে নিম্নলিখিত পদ্ধতিটি ব্যবহার করা যেতে পারে।
Model.estimatedDocumentCount()
এই মডেল পদ্ধতিটি মঙ্গোডিবি সংগ্রহের নথির সংখ্যা অনুমান করে। এই পদ্ধতিটি পূর্বের তুলনায় দ্রুত countDocuments()
, কারণ এটি সম্পূর্ণ সংগ্রহের পরিবর্তে সংগ্রহের মেটাডেটা ব্যবহার করে। তবে, পদ্ধতির নামটি যেমন পরামর্শ দেয় এবং ডিবি কনফিগারেশনের উপর নির্ভর করে ফলাফলটি একটি প্রাক্কলন হিসাবে মেটাডেটা পদ্ধতি প্রয়োগের মুহুর্তে কোনও সংকলনে ডকুমেন্টের প্রকৃত গণনা প্রতিফলিত করতে পারে না।
উভয় পদ্ধতিই একটি মঙ্গুজ ক্যোয়ারী অবজেক্ট ফেরত দেয়, যা নিম্নলিখিত দুটি উপায়ে একটিতে কার্যকর করা যেতে পারে। .exec()
আপনি যদি পরবর্তী সময়ে কোনও প্রশ্ন চালাতে চান তবে ব্যবহার করুন ।
সমাধান
বিকল্প 1: একটি কলব্যাক ফাংশন পাস করুন
উদাহরণস্বরূপ, সংগ্রহের মধ্যে সমস্ত দস্তাবেজগুলি গণনা করুন .countDocuments()
:
someModel.countDocuments({}, function(err, docCount) {
if (err) { return handleError(err) }
console.log(docCount)
})
অথবা, একটি নির্দিষ্ট নাম ব্যবহার করে সংগ্রহের সমস্ত নথি গণনা করুন .countDocuments()
:
someModel.countDocuments({ name: 'Snow' }, function(err, docCount) {
}
বিকল্প 2: ব্যবহার করুন .then()
একটি .then()
মঙ্গুজের ক্যোয়ারিতে তাই এটি "তারপর "যোগ্য। এটি কোনও সুবিধার জন্য এবং ক্যোয়ারী নিজেই কোনও প্রতিশ্রুতি নয়।
উদাহরণস্বরূপ, সংগ্রহের মধ্যে সমস্ত দস্তাবেজগুলি গণনা করুন .estimatedDocumentCount()
:
someModel
.estimatedDocumentCount()
.then(docCount => {
console.log(docCount)
})
.catch(err => {
})
বিকল্প 3: async ব্যবহার / অপেক্ষা করুন
অ্যাসিঙ্ক / অপেক্ষার পদ্ধতির ব্যবহার করার সময়, প্রস্তাবিত উপায় হ'ল এটি ব্যবহার করা .exec()
যেমন এটি আরও ভাল স্ট্যাকের চিহ্ন সরবরাহ করে।
const docCount = await someModel.countDocuments({}).exec();
স্ট্যাকওভারফ্লোয়ারিং দ্বারা শিখছে,