mongodb aggregate 求 distinct, count的功能

本贴最后更新于 3227 天前,其中的信息可能已经时移世易

需求,实现查询,各手游的各渠道的充值人数,充值次数,以及充值总额
select app_id, count(1), count(distinct account_id), sum(recharge_sum) from table group app_id

mongo数据行如下: <!--more-->
&gt; db.t_recharge_history.find({},{"_id":0,"d":0,"s":0});
{ "a" : "121200", "p" : "100037", "c" : "PE", "r" : "12", "rd" : ISODate("2014-08-20T00:00:00Z"), "m" : 1 }
{ "a" : "121200", "p" : "100037", "c" : "PE", "r" : "1", "rd" : ISODate("2014-08-20T00:00:00Z"), "m" : 2 }
{ "a" : "332222", "p" : "100037", "c" : "PE", "r" : "3", "rd" : ISODate("2014-08-20T00:00:00Z"), "m" : 3 }
{ "a" : "333333", "p" : "100062", "c" : "PE", "r" : "123", "rd" : ISODate("2014-08-20T00:00:00Z"), "m" : 33 }
{ "a" : "333334", "p" : "100062", "c" : "PE", "r" : "44", "rd" : ISODate("2014-08-20T00:00:00Z"), "m" : 12 }
{ "a" : "333334", "p" : "100062", "c" : "PE", "r" : "44", "rd" : ISODate("2014-08-20T00:00:00Z"), "m" : 1 }
a: 账户
p: 应用id
c: 渠道
r: 角色ID
rd: 充值日期。

查询方法如下:
1. 先作 应用id, 渠道,玩家 的group , 算出每玩家的充值总额,充值次数
db.t_recharge_history.aggregate(
                                                [
                                                  {
                                                    "$match":{
                                                               "rd" : ISODate("2014-08-20T00:00:00Z")
                                                             }
                                                  },
                                                  { "$project": { "p": 1,  "m":1, "a":1, "c":1,"_id":0 }},
                                                  {
                                                      "$group": {
                                                                  "_id": { "app_id" :"$p", "channel_id" : "$c","account_id":"$a" } ,
                                   "cnt": { "$sum": 1},
                                                                  "rmb_sum": { "$sum": "$m"}
                                                                }  
                                                  },
                                                ]
                                            )

的出下面结果。
{
"result" : [
{
"_id" : {
"app_id" : "100037",
"channel_id" : "PE",
"account_id" : "121200"
},
"cnt" : 2,
"rmb_sum" : 3
},

。。。
2. 将1 的结果再次group,按照应用,渠道 作 group
db.t_recharge_history.aggregate(
[
{
"$match":{
"rd" : ISODate("2014-08-20T00:00:00Z")
}
},
{ "$project": { "p": 1, "m":1, "a":1, "c":1,"_id":0 }},
{
"$group": {
"_id": { "app_id" :"$p", "channel_id" : "$c","account_id":"$a" } ,
"cnt": { "$sum": 1},
"rmb_sum": { "$sum": "$m"}
}
},
{
"$group": {
"_id": { "app_id" :"$_id.app_id", "channel_id" : "$_id.app_id" } ,
"player_cnt": { "$sum": 1},
"recharge_items_cnt": { "$sum": "$cnt" },
"rmb_sum": { "$sum": "$rmb_sum"}
}
},
]
)

最终得出结果:
{
"result" : [
{
"_id" : {
"app_id" : "100062"
},
"player_cnt" : 2,
"recharge_items_cnt" : 3,
"rmb_sum" : 46
},
{
"_id" : {
"app_id" : "100037"
},
"player_cnt" : 2,
"recharge_items_cnt" : 3,
"rmb_sum" : 6
}
],
"ok" : 1
}

  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 5 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Visio
    1 引用 • 2 回帖 • 2 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 644 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    952 引用 • 944 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 9 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 60 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 532 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    170 引用 • 1529 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 568 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 3 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 397 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    54 引用 • 41 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 160 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    173 引用 • 3849 回帖
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 505 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 16 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖 • 1 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 110 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 3 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 387 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    44 引用 • 208 回帖 • 4 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 10 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    133 引用 • 1124 回帖 • 115 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖