Mongo散记–聚合(aggregation)& 查询(Query)

Mongo散记–聚合(aggregation)& 查询(Query)

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

mongo官网:http://www.mongodb.org/

工作中使用到Mongo,可是没有系统的学习研究过Mongo,仅对工作过程中,在Mongo的使用过程中的一些知识点做一下记录,并随时补充,达到总结备忘的目的。

本篇主要终结记录聚合和查询。

聚合(aggregation)

Count

db.view_view.count()

db.view_view.count({_id:”521842″})

db.view_view.find().count()

db.view_view.find({_id:”521842″}).count()

Distinct

db.view_view.distinct(“_id”)

db.view_view.distinct(“view”) view是个数组,会把每一个数组的元素都distinct一下

Group

db.invoke_stat.group({
    key:{ip:true},
    cond:{
        date:{$gte:ISODate("2014-07-09 16:00:00"),$lt:ISODate("2014-07-10 16:00:00")}
    },
    reduce:function(curr,result){
        result.count += curr.times;
    },
    initial:{count:0},
    finalize:function(result) {result.count =  '$' + result.count}
});

db.view_view.group({
    keyf:function(doc){return {view_num:doc.view.length}},
    reduce:function(curr,result){
        result.count += 1;
        result.id = curr._id;
    },
    initial:{count:0}
});

关于以上两个group的解释:

key/keyf:要依照进行分组的列,key是直接选取表中的列,kef是一个函数,对列进行一些处理,函数结果要返回一个对象,比方{view_num:doc.view.length},doc.view.length,是表中的数组列view的长度。

cond:是要过滤的查询条件

reduce:处理函数

initial:返回列的初始值

finalize:对reduce的结果进行进一步处理,比方格式化

MapReduce

db.invoke_stat.mapReduce(
  function(){
      var key = this.ip;
      emit(key,{r_times:this.times})
  },
  function(key,emits){
      total=0;
      for(var k in emits) {
          total+=emits[k].r_times;
      }
      return {r_times:total}
  },
  {out:'mr'}
)

以上:r_times是我们定义的要返回的列的名称,ip和times是表中的列,mr是我们要把MapReduce的计算结果存入名称为mr的集合中。

mapReduce的原型为:function (map, reduce, optionsOrOutString),以下详细介绍一下函数的三个參数:

map函数,它会遍历集合中的每个文档,this表示文档,它使用emit方法将文档按键分组,并返回须要统计的数据;

reduce函数,它将收集数据并统计,两个參数分别为map函数返回的key值和数据数组;

optionsOrOutString參数为一个对象,定义了一些额外工作,比方上面的列子中使用out參数将统计结果放入到mr集合中,集合不存在则创建,存在了则覆盖。

參数optionsOrOutString对象除了out键以外还有其他一些键:

finalize函数,同group的finalize完毕器一样,能够对reduce的结果做一些处理;

query文档,在map函数前对文档过滤;

sort文档,在map函数前对文档排序,必须先对排序的字段建立索引;

limit整数,在map函数前设定文档数量;

scope文档,js函数中用到的变量,client能够通过scope传递一些值;

jsMode布尔,指定了map和reduce函数间传递的对象使用BSON格式还是javascript对象,默认值false,表示採用BSON格式,长处是中间的BSON数据会被存在硬盘上,所以传递的数据量能够非常大,但会影响性能;採用javascript对象,性能较高,但仅仅能传递50万个不同的key值;

verbos布尔,默认true,显示具体的时间统计信息。

以上能够看出MapReduce的强大,能够非常轻松的实现不同的统计功能。

查询(Query)

mongo查询语法:

db.access_logs_140701.find({jxTime:{$gt:1407011300,$lt:1407011400},”curl.sku”:”99978033″}).sort({jxTime:-1}).skip(1).limit(100)

db.invoke_stat.find({date:{$gte:ISODate(“2014-07-09 10:00:00”),$lt:ISODate(“2014-07-09 11:00:00”)}})

db.view_view.find({view:{$size:10}}) 查询数组长度为10的,当前Mongo不直接支持数据长度范围查询,比方查询数据长度<10的,仅仅能MapReduce编程实现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118626.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python lambda表达式及用法_Python lambda表达式及用法

    python lambda表达式及用法_Python lambda表达式及用法lambda表达式是现代编程语言争相引入的一种语法,如果说函数是命名的、方便复用的代码块,那么lambda表达式则是功能更灵活的代码块,它可以在程序中被传递和调用。回顾局部函数get_math_func()函数将返回三个局部函数之一。该函数代码如下:defget_math_func(type):#定义三个局部函数…#返回局部函数iftype==”square”:retu…

    2022年10月18日
    6
  • 大数据管理平台(一)概述「建议收藏」

    大数据管理平台(一)概述「建议收藏」系列文章目录文章目录系列文章目录前言一、功能概述二、使用步骤2.1安装2.2监控2.3管理2.4用户管理2.5应用市场2.6操作系统三、总结前言做大数据有几年了,这些年耳濡目染了一些大数据管理平台的使用,但是或多或少使用起来,都不怎么方便,所以决定自己来实现一个简单的大数据平台一、功能概述大数据应用组件往往很多,可能几百台服务器组成一个Hadoop集群,当部署这些节点时,需要一个节点一个节点的操作,简直不敢想象。同时在这些服务器上可能还部署着Spark、Flink、Hive

    2022年5月1日
    49
  • c# pdb文件_pdb文件是什么

    c# pdb文件_pdb文件是什么C++编译生成的pdb文件就是符号表。这些符号表,程序运行的时候没有用。但调试的时候有用,主要记录如下东西:全局变量 局部变量 函数名及其实体指针地址 帧指针表 源代码行数使用pdb文件进行调试,要和当前运行的程序一致。…

    2022年10月21日
    5
  • MySQL常用SQL语句大全

    MySQL常用SQL语句大全MySQL数据库是一个十分轻便的数据库管理系统,相比大型的数据库管理系统如Oracle、MS-SQL,MySQL更拥有轻便、灵活、开发速度快的特色,更适用于中小型数据的存储与架构。MySQL之所以能够被数以万计的网站采用,也是由此而来。

    2022年6月13日
    43
  • linux下的find文件查找命令与grep文件内容查找命令

    linux下的find文件查找命令与grep文件内容查找命令

    2021年10月14日
    49
  • potplayer怎么设置清晰度_potplayer输出分辨率设置

    potplayer怎么设置清晰度_potplayer输出分辨率设置今天因为要看视频,所以用到了播放器,之前就下载过potplayer和kmplayer这两个播放器,一开始发现kmp的清晰度明显高于potplayer播放器,但随之发现kmplayer有几个缺点①在使用倍速播放的过程中有频繁的卡顿现象②设置较为繁琐③网上的教程不多,维护的人少(这两个软件作者相同,potplayer是作者跳槽之后开发的版本)。 所以还是准备使用potplayer,…

    2025年11月13日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号