Фон для рішення
Як зазначено в документації мангуста та у відповіді Бенджаміна, метод Model.count()
застарілий. Замість використання count()
альтернативами є наступні:
Model.countDocuments(filterObject, callback)
Підраховує кількість документів, які відповідають фільтру в колекції. Передача порожнього об'єкта {}, коли фільтр виконує сканування повної колекції. Якщо колекція велика, може бути використаний наступний метод.
Model.estimatedDocumentCount()
Цей модельний метод оцінює кількість документів у колекції MongoDB. Цей спосіб швидший, ніж попереднійcountDocuments()
, оскільки він використовує метадані колекції замість того, щоб пройти всю колекцію. Однак, як підказує назва методу, і залежно від конфігурації db, результат є оцінкою, оскільки метадані можуть не відображати фактичну кількість документів у колекції в момент виконання методу.
Обидва методи повертають об'єкт запиту мангуста, який може бути виконаний одним із наступних двох способів. Використовуйте, .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()
Мангустний настільки "Thenable". Це для зручності, а сам запит не є обіцянкою.
Наприклад, порахуйте всі документи в колекції за допомогою .estimatedDocumentCount()
:
someModel
.estimatedDocumentCount()
.then(docCount => {
console.log(docCount)
//and do one super neat trick
})
.catch(err => {
//handle possible errors
})
Варіант 3: Використовуйте функцію async / wait
Використовуючи підхід async / wait, рекомендованим способом є його використання, .exec()
оскільки він забезпечує кращі сліди стека.
const docCount = await someModel.countDocuments({}).exec();
Навчання за допомогою stackoverflowing,