如何通过单次MongoDB查询同时返回匹配文档与匹配计数?
MongoDB 单次查询同时获取匹配文档与计数
当然可以通过单次查询同时拿到匹配的文档和对应计数,最直接高效的方式是利用聚合管道的$facet阶段,一次请求完成两个操作,避免多次查询数据库。
具体实现代码
db.collection.aggregate([ // 第一步:过滤出符合employeeNumber条件的文档 { $match: { employeeNumber: employeeNumber } }, // 第二步:用$facet拆分两个结果分支 { $facet: { // 分支1:返回所有匹配的文档 matchedDocuments: [], // 空数组直接保留过滤后的所有文档 // 分支2:统计匹配文档的总数 totalCount: [ { $count: "count" } ] } } ])
结果说明
执行后会返回一个包含单个对象的数组,结构示例如下:
[ { "matchedDocuments": [/* 所有匹配指定employeeNumber的文档列表 */], "totalCount": [ { "count": 3 } ] // 假设匹配到3条数据 } ]
注意事项
- 该方案要求MongoDB版本在3.4及以上,
$facet是这个版本开始支持的特性。 - 不要采用客户端先调用
find再调用countDocuments的方式,本质是两次数据库请求,效率远不如聚合管道的单次查询。
内容的提问来源于stack exchange,提问作者SosijElizabeth
相关产品推荐
相关产品推荐

