Çözüm için arka plan
Firavun faresi belgelerinde ve Benjamin'in yanıtında belirtildiği gibi, yöntem Model.count()
kullanımdan kaldırılmıştır. Kullanmak yerine count()
alternatifler şunlardır:
Model.countDocuments(filterObject, callback)
Bir koleksiyondaki filtreyle kaç belgenin eşleştiğini sayar. Filtre olarak boş bir nesne {} geçirmek, tam bir koleksiyon taraması yürütür. Koleksiyon büyükse, aşağıdaki yöntem kullanılabilir.
Model.estimatedDocumentCount()
Bu model yöntemi, MongoDB koleksiyonundaki belge sayısını tahmin eder. Bu yöntem öncekinden daha hızlıdır countDocuments()
, çünkü tüm koleksiyon boyunca gitmek yerine koleksiyon meta verilerini kullanır. Ancak, yöntem adından da anlaşılacağı gibi ve db yapılandırmasına bağlı olarak, sonuç bir tahmindir, çünkü meta veriler, yöntem yürütme anında bir koleksiyondaki belgelerin gerçek sayısını yansıtmayabilir.
Her iki yöntem de, aşağıdaki iki yoldan biriyle yürütülebilen bir firavun faresi sorgu nesnesi döndürür. .exec()
Daha sonra bir sorgu yürütmek istiyorsanız kullanın .
Çözüm
1. Seçenek: Geri arama işlevi iletme
Örneğin, aşağıdakileri kullanarak bir koleksiyondaki tüm belgeleri sayın .countDocuments()
:
someModel.countDocuments({}, function(err, docCount) {
if (err) { return handleError(err) } //handle possible errors
console.log(docCount)
//and do some other fancy stuff
})
Veya bir koleksiyondaki belirli bir ada sahip tüm belgeleri aşağıdakileri kullanarak sayın .countDocuments()
:
someModel.countDocuments({ name: 'Snow' }, function(err, docCount) {
//see other example
}
2. Seçenek: Kullanım .then()
.then()
Firavun faresi sorguya sahiptir, bu nedenle "ayarlanabilir" dir. Bu bir kolaylık içindir ve sorgunun kendisi bir söz değildir.
Örneğin, aşağıdakileri kullanarak bir koleksiyondaki tüm belgeleri sayın .estimatedDocumentCount()
:
someModel
.estimatedDocumentCount()
.then(docCount => {
console.log(docCount)
//and do one super neat trick
})
.catch(err => {
//handle possible errors
})
3. Seçenek: Eşzamansız / beklemeyi kullanma
Zaman uyumsuz / bekleme yaklaşımını kullanırken , daha iyi yığın izlemeleri sağladığı için önerilen yol, onu kullanmaktır .exec()
.
const docCount = await someModel.countDocuments({}).exec();
Yığın taşarak öğrenme,