为了账号安全,请及时绑定邮箱和手机立即绑定

mongodb如何聚合查询?

mongodb如何聚合查询?

隔江千里 2018-07-13 11:07:02
纯前端一枚,之前没有接触后台数据库,现在学习mongodb数据库,遇到这样的一个情景,建立一个博客的数据库,有这样一个包含所有文章信息的集合,数据伪造如下:{ "id" : 1, "name" : "one", "tags" : [ "a", "c", "e" ] } { "id" : 2, "name" : "two", "tags" : [ "e" ] } { "id" : 3, "name" : "three", "tags" : [ "d", "e" ] } { "id" : 4, "name" : "four", "tags" : [ "g", "c", "e", "h" ] } { "id" : 5, "name" : "five", "tags" : [ "a", "c", "d" ] }tags 表示这篇文章所属的标签类型,现在想要查询出有多少个不同的标签类型,每个标签下有多少条数据,这个该怎么实现?目前想到的是用 aggregate 中的 $unwind 将 tags 进行拆分,然后再用 $group 进行分组统计,但是具体代码该怎么写,或者是有其他更有效的方式,请指教!!!
查看完整描述

2 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

这是个很经典的统计问题,其实已经不是MongoDB特有的范畴了,对于其他数据库来讲也是通用的。
你想的办法本身是没有问题的,肯定可以通过aggregation的$unwind+$group得到你想要的结果。问题在于随着时间推移,参与统计的博客数量将会越来越多,意味着你的统计语句将越来越慢。问题的关键在于如何限制住每次参与统计的记录数。
从另一个角度讲,博客一般写完就很少有改动了,今天统计昨天的所有博客各属于哪些标签,跟明天再来统计昨天的得到的结果应该是一样的(假设没有修改的前提下)。所以每次都进行统计其实是浪费。
基于以上这些考虑,你其实可以每隔一段时间(比如每天)统计一次每个标签都有多少次出现,把它们存起来,在需要时再把这些已经聚合过一次的数据再次聚合。这种方式称为预聚合。
大概的方向是这样,细节的问题你可以先自己思考一下。

查看完整回答
反对 回复 2018-07-21
  • 2 回答
  • 0 关注
  • 846 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信