$sum | 计算总和。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | 计算平均值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push | 在结果文档中插入值到一个数组中。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first | 根据资源文档的排序获取第一个文档数据。 | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
$last | 根据资源文档的排序获取最后一个文档数据 | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |
1、$project实例
db.article.aggregate(
{ $project : {
title : 1 ,
author : 1 ,
}}
);
这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
db.article.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
author : 1
}});
2.$match实例
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
3.$skip实例
db.article.aggregate(
{ $skip : 5 });
实列:针对时间天,时,月,周,年的统计
1.假设有这么一个集合
{
"_id" : 1,
"item" : "abc",
"price" : 10,
"quantity" : 2,
"date" : ISODate("2014-01-01T08:15:39.736Z")
}
我们在执行:
db.sales.aggregate(
[
{
$project: {
yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
time: { $dateToString: { format: "%H:%M:%S:%L", date: "$date" } }
}
}
]
)
结果就是:
{ "_id" : 1, "yearMonthDay" : "2014-01-01", "time" : "08:15:39:736" }
2. 统计每一天的平均值
const historyAir = historyAirDao.aggregate(
[{'$project': {
'SO2':1,'NO':1,'NOx':1,'NO2':1,'O3':1,'PM10':1,'PM25':1,'CO':1,'speed':1,'direct':1,'temp':1,'humidity':1,'pressure':1,'beginTime': { $dateToString: { format: "%Y-%m-%d", date: "$beginTime" }}}},
{'$group': { '_id': "$beginTime", 'SO2': {'$avg': '$SO2'},
'NO2': {'$avg': '$NO2'},
'PM10': {'$avg': '$PM10'},
'PM25': {'$avg': '$PM25'},
'CO': {'$avg': '$CO'},
'NOx': {'$avg': '$NOx'},
'O3': {'$avg': '$O3'},
'speed': {'$avg': '$speed'},
'direct': {'$avg': '$direct'},
'NO': {'$avg': '$NO'},
'temp': {'$avg': '$temp'},
'humidity': {'$avg': '$humidity'},
'pressure': {'$avg': '$pressure'} } },
{'$sort': { "_id": -1 } },
{'$project': { 'SO2':1,'NO':1,'NOx':1,'NO2':1,'O3':1,'PM10':1,'PM25':1,'CO':1,'speed':1,'direct':1,'temp':1,'humidity':1,'pressure':1,beginTime: { $toUpper: "$_id" }, _id: 0 } }])