Aggregation-聚合

Aggregation:

参数说明:sql(Operators)

     where ($match) 、group by ($group) 、having($match)、select($project)、order by($sort)、limit($limit)

     sum($sum)、count($sum)、join($lookup)

MongoVUE操作:

	SELECT cust_id,
       		SUM(price) as total
	FROM orders
	WHERE status = 'A'
	GROUP BY cust_id
	HAVING total > 250
db.orders.aggregate( [
   { $match: { status: 'A' } },
   {
     $group: {
        _id: "$cust_id",
        total: { $sum: "$price" }
     }
   },
   { $match: { total: { $gt: 250 } } }
] )
统计页面的PV、UV和独立IP
{
$project:{子查询--对日期进行处理、获取所有cookId和ip
ord_day:{
year:{$year:"$createTime"},
month:{$month:"$createTime"},
day:{$dayOfMonth:"$createTime" },
},
cookId:"$cookId",
ip:"$ip"
}
},
{
$group:{处理子查询的结果,对日期进行分组
_id:"$ord_day",
users:{$addToSet:"$cookId"},
ips:{$addToSet:"$ip"},
total:{$sum:1}
}
},
{
$project:{
_id:"$_id",
pv:"$total",
uv:{$size:"$users"},
ip:{$size:"$ips"}
}
}


JAVA代码实现:
Aggregation aggregation = Aggregation.newAggregation(
    Aggregation.match(criteria),
    Aggregation.project(fields),
    Aggregation.group(fields),
    Aggregation.sort(sort),
    Aggregation.skip(elementsToSkip),
    Aggregation.limit(maxElements)
    );
    mongoTemplate.aggregate(aggregation, collectionName, outputType)



例如:
Aggregation aggregation = Aggregation.newAggregation(
        Aggregation.match(Criteria.where("status").is("A")),
        Aggregation.group("cust_id").sum("price").as("total"),
        Aggregation.match(Criteria.where("total").gt(250))
        );
        mongoTemplate.aggregate(aggregation, collectionName, outputType)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值