解决方案的背景
如猫鼬文档和本杰明的答案中所述,该方法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()“ thenable”的功能。这是为了方便起见,查询本身并不是一个保证。
例如,使用来计数集合中的所有文档.estimatedDocumentCount():
someModel
    .estimatedDocumentCount()
    .then(docCount => {
        console.log(docCount)
        //and do one super neat trick
    })
    .catch(err => {
        //handle possible errors
    })
选项3:使用异步/等待
使用异步/等待方法时,建议的方法是与它一起使用,.exec()因为它可以提供更好的堆栈跟踪。
const docCount = await someModel.countDocuments({}).exec();
通过堆栈溢出学习