Фон для решения
Как указано в документации мангуста и в ответе Бенджамина, этот метод Model.count()
устарел. Вместо использования count()
есть следующие альтернативы:
Model.countDocuments(filterObject, callback)
Подсчитывает, сколько документов в коллекции соответствует фильтру. При передаче пустого объекта {} в качестве фильтра выполняется полное сканирование коллекции. Если коллекция большая, можно использовать следующий метод.
Model.estimatedDocumentCount()
Этот модельный метод оценивает количество документов в коллекции MongoDB. Этот метод работает быстрее, чем предыдущий countDocuments()
, потому что он использует метаданные коллекции, а не просматривает всю коллекцию. Однако, как следует из названия метода и в зависимости от конфигурации БД, результат является приблизительным, поскольку метаданные могут не отражать фактическое количество документов в коллекции на момент выполнения метода.
Оба метода возвращают объект запроса мангуста, который может быть выполнен одним из следующих двух способов. Используйте, .exec()
если хотите выполнить запрос позже.
Решение
Вариант 1. Передайте функцию обратного вызова
Например, подсчитайте все документы в коллекции, используя .countDocuments()
:
someModel.countDocuments({}, function(err, docCount) {
if (err) { return handleError(err) } //handle possible errors
console.log(docCount)
//and do some other fancy stuff
})
Или подсчитайте все документы в коллекции с определенным именем, используя .countDocuments()
:
someModel.countDocuments({ name: 'Snow' }, function(err, docCount) {
//see other example
}
Вариант 2: использовать .then()
В запросе мангуста .then()
он «пригоден для употребления». Это сделано для удобства, и сам запрос не является обещанием.
Например, подсчитайте все документы в коллекции, используя .estimatedDocumentCount()
:
someModel
.estimatedDocumentCount()
.then(docCount => {
console.log(docCount)
//and do one super neat trick
})
.catch(err => {
//handle possible errors
})
Вариант 3: используйте async / await
При использовании подхода async / await рекомендуется использовать его, .exec()
поскольку он обеспечивает лучшую трассировку стека.
const docCount = await someModel.countDocuments({}).exec();
Обучение путем переполнения стека,