Sfondo per la soluzione
Come affermato nella documentazione di mongoose e nella risposta di Benjamin, il metodo Model.count()è deprecato. Invece di utilizzare count(), le alternative sono le seguenti:
Model.countDocuments(filterObject, callback)
Conta quanti documenti corrispondono al filtro in una raccolta. Il passaggio di un oggetto vuoto {} come filtro esegue una scansione completa della raccolta. Se la raccolta è grande, potrebbe essere utilizzato il seguente metodo.
Model.estimatedDocumentCount()
Questo metodo modello stima il numero di documenti nella raccolta MongoDB. Questo metodo è più veloce del precedente countDocuments(), perché utilizza i metadati della raccolta invece di passare attraverso l'intera raccolta. Tuttavia, come suggerisce il nome del metodo e in base alla configurazione del database, il risultato è una stima poiché i metadati potrebbero non riflettere il conteggio effettivo dei documenti in una raccolta al momento dell'esecuzione del metodo.
Entrambi i metodi restituiscono un oggetto query mongoose, che può essere eseguito in uno dei due modi seguenti. Utilizzare .exec()se si desidera eseguire una query in un secondo momento.
La soluzione
Opzione 1: passare una funzione di callback
Ad esempio, conta tutti i documenti in una raccolta utilizzando .countDocuments():
someModel.countDocuments({}, function(err, docCount) {
if (err) { return handleError(err) } //handle possible errors
console.log(docCount)
//and do some other fancy stuff
})
In alternativa, conta tutti i documenti in una raccolta con un determinato nome utilizzando .countDocuments():
someModel.countDocuments({ name: 'Snow' }, function(err, docCount) {
//see other example
}
Opzione 2: utilizzare .then()
Una query mangusta ha .then() quindi è "quindi modificabile". Questo è per comodità e la query in sé non è una promessa.
Ad esempio, conta tutti i documenti in una raccolta utilizzando .estimatedDocumentCount():
someModel
.estimatedDocumentCount()
.then(docCount => {
console.log(docCount)
//and do one super neat trick
})
.catch(err => {
//handle possible errors
})
Opzione 3: usa async / await
Quando si usa l'approccio async / await, il modo consigliato è usarlo con .exec()in quanto fornisce migliori tracce dello stack.
const docCount = await someModel.countDocuments({}).exec();
Imparando da stackoverflow,