mongo 分组 aggregation
公司私用mongodb做后台存储,可能是图它的无结构,速度快,不过在我实际使用中,速度和mysql相比确实会快点
不过需要分组聚合等查询的时候稍显麻烦,相比mysql而言,最近要做这方面的操作,就调研了下。
sql和mongo聚合查询关键字对应
sql 关键字 | mongo aggregation关键字 |
---|---|
where | $match |
group by | $group |
having | $match |
select … | $project |
order by | $sort |
limit | $limit |
sum | $sum |
count | $sum |
join | $lookup |
avg | $avg |
min | $min |
max | $max |
文档结构如下:
查 收到礼物(幸运魔方)数量最多的前五名主播
sql语句编写应该这样:
SELECT
receiveUid,
receiveUname,
sum( number ) number
FROM
giftRecord
WHERE
giftName = '幸运魔方'
GROUP BY
receiveUid,
receiveUname
ORDER BY
number DESC
LIMIT 5
mongo 聚合操作如下:
需要注意分组里面_id字段是必须有 是分组字段,我这里根据收礼人id分组 所以是receiveUid,另外receiveUname也需要查询,因为要查出来
如果使用spring-data-mongo操作就会更加清晰
更多mongo aggregation操作参见官方文档
https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/