Contexte de la solution
Comme indiqué dans la documentation mangouste et dans la réponse de Benjamin, la méthode Model.count()
est obsolète. À la place d'utilisercount()
, les alternatives sont les suivantes:
Model.countDocuments(filterObject, callback)
Compte le nombre de documents correspondant au filtre dans une collection. Passer un objet vide {} comme filtre exécute une analyse complète de la collection. Si la collection est volumineuse, la méthode suivante peut être utilisée.
Model.estimatedDocumentCount()
Cette méthode de modèle estime le nombre de documents dans la collection MongoDB. Cette méthode est plus rapide que la précédente countDocuments()
, car elle utilise les métadonnées de la collection au lieu de parcourir toute la collection. Cependant, comme le nom de la méthode l'indique et en fonction de la configuration de la base de données, le résultat est une estimation car les métadonnées peuvent ne pas refléter le nombre réel de documents dans une collection au moment de l'exécution de la méthode.
Les deux méthodes renvoient un objet de requête mangouste, qui peut être exécuté de l'une des deux manières suivantes. À utiliser .exec()
si vous souhaitez exécuter une requête ultérieurement.
La solution
Option 1: passer une fonction de rappel
Par exemple, comptez tous les documents d'une collection en utilisant .countDocuments()
:
someModel.countDocuments({}, function(err, docCount) {
if (err) { return handleError(err) } //handle possible errors
console.log(docCount)
//and do some other fancy stuff
})
Ou, comptez tous les documents d'une collection portant un certain nom en utilisant .countDocuments()
:
someModel.countDocuments({ name: 'Snow' }, function(err, docCount) {
//see other example
}
Option 2: utilisation .then()
Une requête mangouste a .then()
donc elle est «alorsable». Ceci est pour une commodité et la requête en elle-même n'est pas une promesse.
Par exemple, comptez tous les documents d'une collection en utilisant .estimatedDocumentCount()
:
someModel
.estimatedDocumentCount()
.then(docCount => {
console.log(docCount)
//and do one super neat trick
})
.catch(err => {
//handle possible errors
})
Option 3: utiliser async / await
Lorsque vous utilisez l'approche async / await, la méthode recommandée est de l'utiliser avec .exec()
car elle fournit de meilleures traces de pile.
const docCount = await someModel.countDocuments({}).exec();
Apprendre par stackoverflowing,