一次mongodb 统计需求

需求:

  临下班运营的同事发来了一个需求,要统计数据库里某个collection的所有document 中某个字段(_id)出现的次数。_id 字段的范围是0-4000。

假设collection 是这样:

{
    _id: 123
},
{
    _id: 456
},
{
    _id:123
}

那么最终结果:[{_id: 123, value: 2}, {_id:456, value: 1}] 其实就是个count frequency 的操作

方案:

  粗暴的方法可以遍历所有document 然后累加,但是更好的方式是用mongodb 的mapreduce 操作:https://docs.mongodb.com/manual/core/map-reduce/

db.collection.mapReduce(
    function(){emit(this._id, 1)},
    function(key, values){return Array.sum(values);},
    {query:{...}, out: {inline: 1}}
)

这里值得一提的是emit 里,value 是1,这样每个document 都是一个1,之后reduce 的时候我们就拿到一个全是1 的数组。

接下来用http://www.cnblogs.com/agentgamer/p/4994650.html 提到的方法,就可以继承到shell 里面,以标准输出的方式交给其他工具使用了,inline 的输出基本是一个json。

时间: 2024-12-06 21:32:02

一次mongodb 统计需求的相关文章

美图数据统计分析平台架构演进 当时我一个人,一天能够做四五个统计需求,而抽象后一天从了解需求开始到实现大概能做七八个统计需求,整体效率有不错的提升。

小结: 1. 一个有追求的程序员的话,可能不会甘于每天做重复的工作.因为在平时接触业务与实现过程中,深有体会统计业务逻辑的流程基本上是一致的,所以考虑抽象出这样一个相对通用的业务处理的流程,基本的流程是从数据源Query出数据,然后做一些业务方面的聚合或者过滤,最终把数据存储到DB.那在代码实现层面做了一层抽象,抽象一个统计的组件,包含Query.Aggregator以及DBStore,然后分别有一些不同Query和Store场景的实现.当做了一层这样的抽象以后,相比于前面的方案,生产力还是得到

MongoDB统计文档(Document)的数组(Array)中的各个元素出现的次数

一,问题描述 [使用 unwind unpack Document 里面的Array中的每个元素,然后使用 group 分组统计,最后使用 sort 对分组结果排序] 从 images.json 文件中导入数据到MongoDB服务器 mongoimport --drop -d test -c images images.json 其中Document的示例如下: > db.images.find() { "_id" : 3, "height" : 480, &

晚间统计需求确认

这次的任务是需要统计晚间的各类销售数据.原先的方案是展示每一天各个时间段的数据,比如查询2月1到2月6的范围,则将这7天的数据分别展示出来.后来上午和上级核对后发现,他之前的需求表述不清楚,其真实想法还是想查看一段时间的合计数据的,因此原方案就不符合现在的需求. 后来在确定新的方案时,小组长提议到修改sql语句,支持根据一段时间进行查询.但是本次的需求是要统计晚间固定时间段,比如是2月1日晚上21:00-21:30.21:30-22:00的数据,并且数据库存放的是时间戳,因此只用一条sql进行时

一个运营统计需求脚本的连续剧

近期,应运营需求,写了一个日志分析的脚本,期中颇有感触,特发此文,吊念逝去的前几天. 其实大家脚本实现的原理都差不多,但是评判好与不好的一个标准不应该是仅仅实现了功能. 打个比方,如果你能让一个第一次开车的人,感觉自己像个老司机一样,那你就很牛逼. 闲话少说,直接开整.下面就是我心中一个好脚本应该有的特质: 1.自动化, 有一个连贯的思维逻辑.写之前可以先写一个实现功能大致流程. 可以有一些判断机制,比如目录存在或者目标不存在,程序怎么运行. 也可以有一些脚本执行完成状态的反馈,比如追加到一个l

【mongodb】 需求

增删改查 增加:  (表名,增加内容) 删除: (表名,数据id) 改: (表名 根据id获取数据 修改 增加 查 (表名,字段 ) 关联查询? 请主站提供一下 在使用的接口

用mongodb存储日志

最近一直在考虑架构的事情,有一个问题依然困扰着我们这些做业务系统的,那就是日志以及日志统计.大概的问题如下: 我们有很多模块,日志格式虽然类似但都写在各自的服务器和目录中. 日志中有很多信息是key=>value格式的数据. 通常一个功能上线后,PM或者需求方都会要求一些统计数据以及报表之类,用来跟踪功能的使用效果.通常PM是不懂写程序的,因此统计数据的事情多半又提给RD. 这种统计数据和报表,价值随着时间的流逝而递减,到了某个时间就不再有价值,不再有人关心,而统计程序还在跑,保不齐哪天又要维护

Mongodb中数据聚合之基本聚合函数count、distinct、group

在之前的文章<Mongodb中数据聚合之MapReduce>中,我们提到过Mongodb中进行数据聚合操作的一种方式--MapReduce,但是在大多数日常使用过程中,我们并不需要使用MapReduce来进行操作,不然有点杀鸡用牛刀的感觉,在这边文章中,我们就简单说说用自带的聚合函数进行数据聚合操作的实现. Mongodb中自带的基本聚合函数有三种:count.distinct和group.下面我们分别来讲述一下这三个基本聚合函数. (1)count 作用:简单统计集合中符合某种条件的文档数量

利用JS跨域做一个简单的页面访问统计系统

其实在大部分互联网web产品中,我们通常会用百度统计或者谷歌统计分析系统,通过在程序中引入特定的JS脚本,然后便可以在这些统计系统中看到自己网站页面具体的访问情况.但是有些时候,由于一些特殊情况,我们需要自己来设计统计系统.由于前段时间公司的业务需求,我也是自己尝试了下,本文提供的是一个基本思路,统计系统也比较简单. 几个基本统计需求: 1.统计web每个页面用户访问量 2.统计用户访问者的和IP地址信息 3.页面之间的跳转情况 4.访问高峰时间段 服务器结构: 数据库表设计: 以上只是我简单列

JAVA课程结课实验题目(河北省重大技术需求征集系统设计)

为了充分利用京津科技资源,破解河北省省产业转型升级.绿 色崛起所面临的重大技术难题,现面向重点产业.重点领域.重点 企业(单位)征集产业或领域关键技术难题,构建河北省重大技术 需求数据库. 3.数据结构要求:(10分) 定义 Infomati on 类,其中包括六个私有变量(infonumber,infoname, infocontent,infosum,infostate,infoyear). (1)各成员 的含义如下:(5 分) ① 变量 infonumber  为字符串类型 String,