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", {});
执行的结果如下:
[ "张三", "李四", "王五" ]
可以看到重复的名称已经被去除掉了。