Antecedentes de la solución
Como se indica en la documentación de mangosta y en la respuesta de Benjamin, el método Model.count()
está en desuso. En lugar de utilizar count()
, las alternativas son las siguientes:
Model.countDocuments(filterObject, callback)
Cuenta cuántos documentos coinciden con el filtro en una colección. Pasar un objeto vacío {} como filtro ejecuta un escaneo de colección completo. Si la colección es grande, se puede utilizar el siguiente método.
Model.estimatedDocumentCount()
Este método de modelo estima el número de documentos de la colección MongoDB. Este método es más rápido que el anterior countDocuments()
, porque utiliza metadatos de colección en lugar de pasar por toda la colección. Sin embargo, como sugiere el nombre del método, y dependiendo de la configuración de la base de datos, el resultado es una estimación, ya que es posible que los metadatos no reflejen el recuento real de documentos en una colección en el momento de ejecución del método.
Ambos métodos devuelven un objeto de consulta mongoose, que se puede ejecutar de una de las dos formas siguientes. Úselo .exec()
si desea ejecutar una consulta más adelante.
La solución
Opción 1: pasar una función de devolución de llamada
Por ejemplo, cuente todos los documentos de una colección usando .countDocuments()
:
someModel.countDocuments({}, function(err, docCount) {
if (err) { return handleError(err) } //handle possible errors
console.log(docCount)
//and do some other fancy stuff
})
O cuente todos los documentos de una colección que tengan un nombre determinado utilizando .countDocuments()
:
someModel.countDocuments({ name: 'Snow' }, function(err, docCount) {
//see other example
}
Opción 2: usar .then()
Una consulta de mangosta tiene .then()
por lo que es "thenable". Esto es por conveniencia y la consulta en sí no es una promesa.
Por ejemplo, cuente todos los documentos de una colección usando .estimatedDocumentCount()
:
someModel
.estimatedDocumentCount()
.then(docCount => {
console.log(docCount)
//and do one super neat trick
})
.catch(err => {
//handle possible errors
})
Opción 3: usar async / await
Cuando se usa el enfoque asíncrono / espera, la forma recomendada es usarlo con .exec()
ya que proporciona mejores seguimientos de pila.
const docCount = await someModel.countDocuments({}).exec();
Aprendiendo por stackoverflowing,