首页 > 解决方案 > mongodb - 聚合游标计数

问题描述

我正在阅读 API 文档(并且正在做一些实验),但它似乎cursor.count()不再存在,所以我想知道是否有可能获得你的聚合计数。这是因为我想知道总共有多少个文档,同时仍然限制和跳过结果。我目前正在使用 $facet 来促进这一点,但不确定是否有更好的方法。

{
    $facet: 
    {
        "results": 
        [
            {
                "$skip": 
                    start
            },
            {
                "$limit": 
                    finish
            },
        ],
        "total": 
        [
            {
                "$count": 
                    "total" 
            },
        ]
    }
}

标签: javascriptnode.jsmongodb

解决方案


用于这个用$facet例很好,无论是风格还是性能。不过应该注意的是,这实际上是两个查询合二为一,尽管是在服务器端优化的。无论设置如何,获取过滤材料的全部计数(或者如果没有初始过滤器,则根本没有过滤器$match)需要时间$skip/$limit。如果$match产生相对少量的材料,那么$count会很快。所涉及的动态与常规 SQL 世界中的动态非常相似,例如 运行带有 LIMIT/OFFSET 的查询并获得总行数


推荐阅读