一次mongodb 统计需求

Posted Agentgamer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一次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。

以上是关于一次mongodb 统计需求的主要内容,如果未能解决你的问题,请参考以下文章

java web一次需求改动的教训

如何将代码片段存储在 mongodb 中?

mongoDB统计数据--mapReduce实现

从MongoDB中 读取数据,并按照需求进行写入数据

从MongoDB中 读取数据,并按照需求进行写入数据

201671010432词频统计软件项目报告