Bagaimana saya bisa mengetahui hitungan model yang datanya telah disimpan? ada metode Model.count()
, tetapi tampaknya tidak berhasil.
var db = mongoose.connect('mongodb://localhost/myApp');
var userSchema = new Schema({name:String,password:String});
userModel =db.model('UserList',userSchema);
var userCount = userModel.count('name');
userCount
itu sebuah Object, yang disebut method bisa mendapatkan real count
?
Terima kasih
Jawaban:
Kode di bawah berfungsi. Perhatikan penggunaan countDocuments .
sumber
Alasan kode Anda tidak berfungsi adalah karena fungsi count asynchronous, itu tidak mengembalikan nilai secara sinkron.
Berikut contoh penggunaan:
sumber
count
metode depricated, Anda dapat menggunakancountDocuments
sintaks yang samaCollection.count tidak digunakan lagi, dan akan dihapus pada versi mendatang. Gunakan koleksi. countDocuments atau collection. estimDocumentCount sebagai gantinya.
sumber
UnhandledPromiseRejectionWarning: TypeError: userModel.countDocuments is not a function
Saya mendapatkan kesalahan saat menggunakannya di userModel saya sendiri?Anda harus memberikan objek sebagai argumen
atau
atau
Pada luwak versi terbaru, count () sudah tidak digunakan lagi, jadi gunakan
sumber
Latar belakang solusinya
Seperti yang dinyatakan dalam dokumentasi luwak dan dalam jawaban Benjamin, metode
Model.count()
ini tidak digunakan lagi. Alih-alih menggunakancount()
, 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()
:Atau, hitung semua dokumen dalam koleksi yang memiliki nama tertentu menggunakan
.countDocuments()
: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()
: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.Belajar dengan stackoverflowing,
sumber
Jawaban pilihan tertinggi di sini baik-baik saja. Saya hanya ingin menambahkan penggunaan menunggu sehingga fungsionalitas yang diminta dapat diarsipkan:
Direkomendasikan untuk menggunakan countDocuments () di atas 'count ()' karena tidak akan digunakan lagi. Jadi, untuk saat ini, kode yang tepat adalah:
sumber
Seperti yang dikatakan sebelumnya, kode Anda tidak akan berfungsi sebagaimana mestinya. Solusi untuk itu akan menggunakan fungsi panggilan balik, tetapi jika Anda pikir itu akan membawa Anda ke 'neraka panggilan balik', Anda dapat mencari "Janji".
Solusi yang mungkin menggunakan fungsi panggilan balik:
Jika Anda ingin mencari jumlah dokumen berdasarkan query, Anda dapat melakukan ini:
setNumberofDocuments adalah fungsi terpisah:
Sekarang Anda bisa mendapatkan jumlah Dokumen di mana saja dengan getFungsi:
Selain itu, Anda menggunakan fungsi asinkron ini di dalam fungsi sinkron dengan menggunakan callback, contoh:
Semoga bisa membantu orang lain. :)
sumber