Latar belakang solusinya
Seperti yang dinyatakan dalam dokumentasi luwak dan dalam jawaban Benjamin, metode Model.count()
ini tidak digunakan lagi. Alih-alih menggunakan count()
, alternatifnya adalah sebagai berikut:
Model.countDocuments(filterObject, callback)
Menghitung berapa banyak dokumen yang cocok dengan filter dalam koleksi. Meneruskan objek kosong {} sebagai filter menjalankan pemindaian koleksi lengkap. Jika koleksinya besar, metode berikut dapat digunakan.
Model.estimatedDocumentCount()
Metode model ini memperkirakan jumlah dokumen dalam koleksi MongoDB. Metode ini lebih cepat daripada sebelumnya countDocuments()
, karena menggunakan metadata koleksi alih-alih melalui seluruh koleksi. Namun, seperti yang disarankan oleh nama metode, dan bergantung pada konfigurasi db, hasilnya adalah perkiraan karena metadata mungkin tidak mencerminkan jumlah sebenarnya dari dokumen dalam koleksi pada saat eksekusi metode.
Kedua metode mengembalikan objek kueri luwak, yang dapat dieksekusi dengan salah satu dari dua cara berikut. Gunakan .exec()
jika Anda ingin mengeksekusi kueri di lain waktu.
Solusinya
Opsi 1: Meneruskan fungsi panggilan balik
Misalnya, hitung semua dokumen dalam sebuah koleksi menggunakan .countDocuments()
:
someModel.countDocuments({}, function(err, docCount) {
if (err) { return handleError(err) } //handle possible errors
console.log(docCount)
//and do some other fancy stuff
})
Atau, hitung semua dokumen dalam koleksi yang memiliki nama tertentu menggunakan .countDocuments()
:
someModel.countDocuments({ name: 'Snow' }, function(err, docCount) {
//see other example
}
Opsi 2: Gunakan .then()
Kueri luwak .then()
jadi "dapat diterima". Ini untuk kenyamanan dan permintaan itu sendiri bukanlah janji.
Misalnya, hitung semua dokumen dalam sebuah koleksi menggunakan .estimatedDocumentCount()
:
someModel
.estimatedDocumentCount()
.then(docCount => {
console.log(docCount)
//and do one super neat trick
})
.catch(err => {
//handle possible errors
})
Opsi 3: Gunakan async / await
Saat menggunakan pendekatan async / await, cara yang disarankan adalah menggunakannya karena pendekatan .exec()
ini menyediakan pelacakan tumpukan yang lebih baik.
const docCount = await someModel.countDocuments({}).exec();
Belajar dengan stackoverflowing,