mongodb使用聚合函数

$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,tilteauthor三个字段了,默认情况下_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 } }])

        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值