1、管道操作符
~$match:用于进行删选,不能用于地理空间操作符
{$match:{"state":"OR"}}
~$project
*设置那个字段该返回
{$project:{"author":1,"_id":0}}
*重命名(注意后面有个_id:0这个是必须得,不然会返回两次)
*重命名并排序
虽然这两种方法都可以,但是还是要尽量使用之前的名字,不要使用命名后的名字
*数学表达式
加法
其他的就是类似这样的写法
$add:加法
$subtract:减法
$multiply:乘法
$divide:除法
$mod:余数
*日期表达式
$year:年
$month:月
$week:工作周
$dayOfMonth:这个月里面的几号
$dayOfWeek:这周里面的周几,周日是周一
$dayOfYear:今年的第几天
$hour:小时
$minute:分钟
$second:秒
*字符串表达式
$substr:截取
$concat:连接
$toLower:变小写
$toUpper:变大写
*逻辑表达式(其中描述中的1,2代表expr1,expr2)
$cmp:[expr1,expr2]比较,如果1=2则返回0;如果1<2则返回负数,如果1>2则返回正数
$strcasecmp:[expr1,expr2]字符串比较,区分大小写,只对罗马字符组成的字符串有效
$eq/$ne/$gt/$gte/$lt/$lte:比较,返回true或false
$and与
$or或
$not反
$cond:[booleanExpr,expr2,expr3]三目运算符,如果booleanExpr true返回2,如果false返回3
$ifnull:[expr1,expr2]如果是空返回2,否则1
综上应用:
如果一个教授给学生打分,出勤10%,成绩30%,期末考试60%,老师宠爱的学生呢,就不用算了,直接100,怎么计算学生总分
~$group
$sum:和
$avg:平均值
看每个国家的总后入,分组
$max:最大值
$min:最小值
$first:第一个值
$last:最后一个值
$addToSet:将另一个数组放进当前数组中,顺序不确定,元素唯一
$push:元素不唯一,不管什么都加到里面
看之前的神奇修改器中例子
$unwin拆分
$sort排序
$limit限制接收前几个文档
$skip跳过几个文档
备注:在使用管道($project,$group,$unwind)之前尽量将过多的文档和字段过滤掉,因为如果过多使用聚合MongoDB发现占用内存超过20%,就会直接报错
2、MapReduce
MapReduce非常强大,灵活,有些问题过于复杂,所以没办法使用聚合函数,这个是使用JavaScript作为查询语言,但是非常慢,不适合用于实时数据分析
找到一篇很好的博文说MapReduce很厉害
http://www.cnblogs.com/loogn/archive/2012/02/09/2344054.html