【发布时间】:2013-07-20 00:11:06
【问题描述】:
在 MongoDB 上运行正常的“查找”查询时,我可以通过在返回的游标上运行“计数”来获得总结果计数(不考虑限制)。因此,即使我将结果集限制为 10(例如),我仍然可以知道结果总数为 53(再次,例如)。
如果我理解正确,那么聚合框架不会返回游标,而只是返回结果。因此,如果我使用$limit 管道运算符,我如何知道结果的总数而不管所述限制?
我想我可以运行两次聚合(一次通过$group 计算结果,一次通过$limit 计算实际有限的结果),但这似乎效率低下。
另一种方法是在$limit 操作之前将结果总数附加到文档(通过$group),但这似乎也低效,因为这个数字将附加到每个文档(而不仅仅是为集合返回一次)。
我在这里遗漏了什么吗?有任何想法吗?谢谢!
例如,如果这是查询:
db.article.aggregate(
{ $group : {
_id : "$author",
posts : { $sum : 1 }
}},
{ $sort : { posts: -1 } },
{ $limit : 5 }
);
我怎么知道有多少结果可用($limit 之前)?结果不是游标,所以我不能只对它进行计数。
【问题讨论】:
-
如果您将查询作为示例添加到问题中会很有帮助
-
添加了代码示例。不过,这个问题是通用的(我认为)。谢谢!
-
更新的MongoDB Aggregation: How to get total records count? 的副本,有更好的答案。
标签: mongodb mongodb-query