解决方案的背景
正如猫鼬文档和本杰明的回答中所述,该方法Model.count()
已被弃用。代替 using count()
,替代方案如下:
Model.countDocuments(filterObject, callback)
计算有多少文档与集合中的过滤器匹配。传递一个空对象 {} 作为过滤器会执行完整的集合扫描。如果集合很大,可以使用以下方法。
Model.estimatedDocumentCount()
此模型方法估计 MongoDB 集合中的文档数。这种方法比以前的方法更快countDocuments()
,因为它使用集合元数据而不是遍历整个集合。但是,正如方法名称所暗示的那样,并且根据数据库配置,结果是估计值,因为元数据可能无法反映方法执行时刻集合中文档的实际数量。
两种方法都返回一个 mongoose 查询对象,可以通过以下两种方式之一执行。.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()
mongoose查询具有.then()
“thenable”。这是为了方便,查询本身并不是一个承诺。
例如,使用以下方法计算集合中的所有文档.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();
通过stackoverflow学习,