聚合是指对取出的数据进行一系列的处理和分析,具体操作用到aggregate方法和管道操作符。
下面列出常用的几种管道操作符:
1. $match
用于筛选记录:
> db.collection.aggregate({'$match': {'key': 'value'}})
2. $project
用于选择出想要的字段:
> db.collection.aggregate({'$project': {'author': 1, '_id': 0}})
也可以进行重命名后显示,注意要将改名前的字段去掉:
> db.collection.aggregate({'$project': {'userid': '$_id', '_id': 0}})
$project也可以接受表达式,如下面的project返回两个值之和,记录为total字段:
> db.collection.aggregate({'$project': {'total': {'$add': ['v1', 'v2']}}})
类似的数学计算操作符还有$subtract, $multiply, $divide, $mod等。
下面的project会将记录中的月份提取出来:
> db.collection.aggregate({'$project': {'hiremonth': {'$month': '$hiredate'}}})
也可以对时间做减法求出时长:
> db.collection.aggregate({'$project': {'duration': {'$subtract': [{'$year': new Date()}, {'$year': '$hiretime'}]}}})
字符串操作符包括:
$substr(用于截取字符串)、$concat(用于拼接字符串)、$toLower、$toUpper
另外,还有两个控制操作符:
$cond用于条件判断,格式是:'$cond' : [booleanexpr, trueexpr, falseexpr],当booleanexpr判断为真时,执行第一个表达式,否则执行第二个表达式。
$ifNull用于执行替补命令,格式是:'$ifNull': [expr, replaceexpr],当expr不为空时执行expr,否则执行后面一个表达式。
3. $group
$group对记录按照指定字段进行分组。比如下面的例子,分组后同时返回最高和最低的分数:
> db.collection.aggregate({'$group': {'_id': '$grade', 'lowest': {'$min': '$score'}, 'highest': {'$max': '$score'}}})
4. $sort、$limit、$skip
用于排序、限制返回数量和跳过记录数量。