翻译或纠错本页面
单一用途的聚合¶
聚合指的是一大类对数据集执行运算的方法,这些方法对输入数据执行特定的步骤从而计算出一个结果。MongoDB提供了一组对数据集执行特定操作的聚合方法。
尽管与 聚合管道 和 映射化简 比起来,它们的使用范围有限,但是这些方法的名称很直观的表达了它的功能,非常易于理解使用。
总数¶
MongoDB可以返回符合查询条件的文档总数。除了 count 命令, mongo 脚本程序中的 count() 方法和 cursor.count() 方法都可以得到文档总数。
例子
现在有一个名为 records 的集合中 只有 下面这些文档:
{ a: 1, b: 0 }
{ a: 1, b: 1 }
{ a: 1, b: 4 }
{ a: 2, b: 2 }
下面的操作会统计集合中的文档个数,并最终返回数字 4:
db.records.count()
下面的操作会统计字段 a 的值是 1 的文档个数,最终返回 3:
db.records.count( { a: 1 } )
去除重复¶
去除重复 操作会返回查询到的指定字段值不重复的记录。在 mongo 脚本程序中,使用 distinct 命令或者 db.collection.distinct() 方法执行去重。请看下面的去除重复的例子:
例子
现在有一个名为 records 的集合中 只有 下面这些文档:
{ a: 1, b: 0 }
{ a: 1, b: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 4 }
{ a: 2, b: 2 }
{ a: 2, b: 2 }
请看下面使用 db.collection.distinct() 方法对字段 b 进行去除重复的操作:
db.records.distinct( "b" )
这个操作的结果是:
[ 0, 1, 4, 2 ]
分组¶
分组 操作会把查询到的文档按照给定的字段值进行分组。分组操作会返回一个文档数组,其中的每个文档包含了一组文档的计算结果。
可以在 mongo 脚本程序中通过 group 命令或者 db.collection.group() 方法来使用分组的功能。
请看下面的分组操作:
例子
现在有一个名为 records 的集合,它包含有如下文档:
{ a: 1, count: 4 }
{ a: 1, count: 2 }
{ a: 1, count: 4 }
{ a: 2, count: 3 }
{ a: 2, count: 1 }
{ a: 1, count: 5 }
{ a: 4, count: 4 }
请考虑用 group 命令对集合中的文档进行分组,分组条件是字段 a 值小于 3 ,同时需要对每组的 count 字段计数:
db.records.group( {
key: { a: 1 },
cond: { a: { $lt: 3 } },
reduce: function(cur, result) { result.count += cur.count },
initial: { count: 0 }
} )
这次分组操作的结果是:
[
{ a: 1, count: 15 },
{ a: 2, count: 4 }
]