MongoDB 中实现聚合提供了两种方式,分别是聚合方法和集合管道,一般来说聚合方法用于执行一些简单的文档聚合操作,功能比较单一,如果要对文档进行复杂的聚合操作还是需要使用聚合管道。

本篇我们主要介绍聚合方法,首先我们先介绍一下Mongo为我们提供的都有哪些聚合方法:

        db.collection.estimatedDocumentCount(options)

                返回集合或者视图中文档的近似数量。

        db.collection.count(query, options)

                返回集合或者视图中文档的数量。

        db.collection.distinct(field, query, options)

                返回文档中指定字段的去重值的数组。

下面我们详细对上面的聚合方法进行介绍:

一、准备工作

初始化数据:

db.test.insertMany(
    [
        { "_id" : "1001", "name" : "张三", "fruits" : [ "apple", "orange" ] },
        { "_id" : "1002", "name" : "李四", "fruits" : [ "apple", "orange" ] },
        { "_id" : "1003", "name" : "王五", "fruits" : [ "banana", "apple", "orange" ] },
        { "_id" : "1004", "name" : "张三", "fruits" : [ "banana", "apple", "orange" ] }
    ]
);

二、estimatedDocumentCount

语法:db.collection.estimatedDocumentCount(options)

        返回集合或者视图中文档的近似数量。

options: 可选,是document类型的字段,其中可以提供的参数包括:

        maxTimeMS:可选,允许统计运行的最长时间

例子:

统计文档的数量:

db.test.estimatedDocumentCount();

运行后结果是4

estimatedDocumentCount统计的是近似数量,而非实际数量;

estimatedDocumentCount统计的是集合或视图中的文档数量,不能根据条件过滤统计集合或视图中文档的数量

三、count

语法:db.collection.count(query, options)

        返回集合或者视图中文档的数量。

query:  查询过滤器,是document类型的字段

options:  可选,其他的一些选项,是document类型的字段

        limit: 可选, 统计文档的最大数量。

        skip: 可选,统计之前跳过的文档数量。

         maxTimeMS:可选,允许统计运行的最长时间

例子:

统计拥有banana的人员数量:

db.test.count({ "fruits": "banana" });

运行后结果是2

四、distinct

语法:db.collection.distinct(field, query, options)

        返回文档中指定字段的去重值的数组。

field: 去重值的字段,是string类型的字段

query: 可选,查询过滤器,是document类型的字段

options: 可选,其他的一些选项,是document类型的字段

        collation: 整理文档的规则

例子:

获取所有人员名称:

db.test.distinct("name", {});

执行的结果如下:

[ "张三", "李四", "王五" ]

可以看到重复的名称已经被去除掉了。