Как я могу узнать количество сохраненных данных модели? есть способ Model.count()
, но вроде не работает.
var db = mongoose.connect('mongodb://localhost/myApp');
var userSchema = new Schema({name:String,password:String});
userModel =db.model('UserList',userSchema);
var userCount = userModel.count('name');
userCount
это объект, какой вызываемый метод может получить реальный count
?
Спасибо
Ответы:
Код ниже работает. Обратите внимание на использование countDocuments .
источник
Причина, по которой ваш код не работает, заключается в том, что функция подсчета является асинхронной, она не возвращает значение синхронно.
Вот пример использования:
источник
count
метод описан, вы можете использоватьcountDocuments
тот же синтаксисВы должны указать объект в качестве аргумента
или
или
В последней версии мангуста count () устарел, поэтому используйте
источник
Collection.count устарел и будет удален в будущей версии. Используйте коллекцию. countDocuments или коллекции. РасчетныйДокументКаунт вместо этого.
источник
UnhandledPromiseRejectionWarning: TypeError: userModel.countDocuments is not a function
Я получаю сообщение об ошибке при использовании в моей пользовательской модели?Фон для решения
Как указано в документации мангуста и в ответе Бенджамина, этот метод
Model.count()
устарел. Вместо использованияcount()
есть следующие альтернативы:Model.countDocuments(filterObject, callback)
Подсчитывает, сколько документов в коллекции соответствует фильтру. При передаче пустого объекта {} в качестве фильтра выполняется полное сканирование коллекции. Если коллекция большая, можно использовать следующий метод.
Model.estimatedDocumentCount()
Этот модельный метод оценивает количество документов в коллекции MongoDB. Этот метод работает быстрее, чем предыдущий
countDocuments()
, потому что он использует метаданные коллекции, а не просматривает всю коллекцию. Однако, как следует из названия метода и в зависимости от конфигурации БД, результат является приблизительным, поскольку метаданные могут не отражать фактическое количество документов в коллекции на момент выполнения метода.Оба метода возвращают объект запроса мангуста, который может быть выполнен одним из следующих двух способов. Используйте,
.exec()
если хотите выполнить запрос позже.Решение
Вариант 1. Передайте функцию обратного вызова
Например, подсчитайте все документы в коллекции, используя
.countDocuments()
:Или подсчитайте все документы в коллекции с определенным именем, используя
.countDocuments()
:Вариант 2: использовать
.then()
В запросе мангуста
.then()
он «пригоден для употребления». Это сделано для удобства, и сам запрос не является обещанием.Например, подсчитайте все документы в коллекции, используя
.estimatedDocumentCount()
:Вариант 3: используйте async / await
При использовании подхода async / await рекомендуется использовать его,
.exec()
поскольку он обеспечивает лучшую трассировку стека.Обучение путем переполнения стека,
источник
Ответы, получившие наибольшее количество голосов, здесь совершенно нормальны, я просто хочу добавить использование await, чтобы запрошенные функции можно было заархивировать:
Рекомендуется использовать countDocuments () вместо count (), поскольку в дальнейшем это будет устаревшим. Итак, на данный момент идеальный код будет:
источник
Используя mongoose.js, вы можете считать документы
const count = await Schema.countDocuments(); // count all
const count = await Schema.countDocuments({ key: value }); // count specific
источник
Как было сказано ранее, ваш код не будет работать так, как есть. Решением этого может быть использование функции обратного вызова, но если вы думаете, что это приведет вас в «ад обратного вызова», вы можете выполнить поиск по запросу «Promisses».
Возможное решение с использованием функции обратного вызова:
если вы хотите выполнить поиск по количеству документов на основе запроса, вы можете сделать это:
setNumberofDocuments - это отдельная функция:
Теперь вы можете получить количество документов где угодно с помощью getFunction:
Кроме того, вы используете эту асинхронную функцию внутри синхронной, используя обратный вызов, например:
Надеюсь, это поможет другим. :)
источник