countDocuments()(按条件计数)
最后更新:2026-10-09
countDocuments()(按条件计数)
countDocuments()统计集合中匹配过滤条件的文档数量,例如`db.users.countDocuments({ age: { $gte: 18 } })`。它在服务端执行并返回精确计数值。与estimatedDocumentCount()不同,countDocuments()会真正匹配条件,因此统计准确但速度较慢,适合需要精确计数的场景。对超大集合的性能敏感查询建议结合索引。
| 分类 | 读取 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.countDocuments(<过滤条件>, { limit: <数量> })
⚙️ 参数
| 过滤条件 | 计数条件对象;空{}统计集合全部文档。 |
|---|---|
| limit | 可选。最多计数的文档数上限。 |
返回值:匹配条件的文档数量(整数)。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// countDocuments:统计成年用户数量
const n = db.users.countDocuments({ age: { $gte: 18 } })
print('成年用户数: ' + n)
运行结果:
成年用户数: 42
📌 注意事项
- 是精确计数,会实际匹配文档,代价是比estimatedDocumentCount慢
- 建议给过滤条件涉及的字段建索引,否则大集合会全表扫描
- 统计集合总数可以传空条件{}
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
QcountDocuments和estimatedDocumentCount有什么区别?
AcountDocuments()精确匹配条件但较慢;estimatedDocumentCount()用集合元数据估算,快但可能不准。
QcountDocuments为什么不推荐直接数全集合?
A它要扫描匹配条件,统计大集合全量很慢。只要数量级而非精确值,用estimatedDocumentCount()更合适。
QcountDocuments查不到结果返回0还是报错?
A返回0,不会报错。可以安全地用于条件判断。