Antecedentes para a solução
Conforme declarado na documentação do mangusto e na resposta de Benjamin, o método Model.count()
está obsoleto. Em vez de usar count()
, as alternativas são as seguintes:
Model.countDocuments(filterObject, callback)
Conta quantos documentos correspondem ao filtro em uma coleção. Passar um objeto vazio {} como filtro executa uma verificação de coleção completa. Se a coleção for grande, o método a seguir pode ser usado.
Model.estimatedDocumentCount()
Este método de modelo estima o número de documentos na coleção MongoDB. Este método é mais rápido que o anterior countDocuments()
, porque usa metadados de coleção em vez de percorrer toda a coleção. No entanto, como o nome do método sugere, e dependendo da configuração do banco de dados, o resultado é uma estimativa, pois os metadados podem não refletir a contagem real de documentos em uma coleção no momento da execução do método.
Ambos os métodos retornam um objeto de consulta mongoose, que pode ser executado de uma das seguintes maneiras. Use .exec()
se quiser executar uma consulta posteriormente.
A solução
Opção 1: passe uma função de retorno de chamada
Por exemplo, conte todos os documentos em uma coleção usando .countDocuments()
:
someModel.countDocuments({}, function(err, docCount) {
if (err) { return handleError(err) } //handle possible errors
console.log(docCount)
//and do some other fancy stuff
})
Ou conte todos os documentos em uma coleção com um determinado nome usando .countDocuments()
:
someModel.countDocuments({ name: 'Snow' }, function(err, docCount) {
//see other example
}
Opção 2: usar .then()
Uma consulta de mangusto tem .then()
é "thenable". Isso é para conveniência e a consulta em si não é uma promessa.
Por exemplo, conte todos os documentos em uma coleção usando .estimatedDocumentCount()
:
someModel
.estimatedDocumentCount()
.then(docCount => {
console.log(docCount)
//and do one super neat trick
})
.catch(err => {
//handle possible errors
})
Opção 3: usar assíncrono / esperar
Ao usar a abordagem async / await, a maneira recomendada é usá-la com, .exec()
pois ela fornece rastreamentos de pilha melhores.
const docCount = await someModel.countDocuments({}).exec();
Aprendendo pelo overflowing da pilha,