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)

https://blog.csdn.net/forget_fg1/article/details/53524294?utm_source=copy

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值