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://www.cnblogs.com/yxwkf/p/3916610.html

Mongo散记--聚合(aggregation)amp; 查询(Query)相关推荐

  1. es 时间字段聚合_Elasticsearch 聚合(aggregation)查询返回所有

    Elasticsearch做查询的时候,很多情况下,有一些查询满足不了我们的要求,这个时候,我们用Elasticsearch的聚合(aggregation)函数,下面讲讲aggregation的使用姿 ...

  2. Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计

    Elasticsearch实战-查询query,filter过滤,结合aggs 进行局部/全局聚合统计 文章目录 Elasticsearch实战-查询query,filter过滤,结合aggs 进行局 ...

  3. java操作MangoDB的聚合Aggregation用法-分页查询

    构造聚合 Aggregation aggregation = newAggregation(match(beforeCriteria),unwind("suborders"),ma ...

  4. ElasticSearch+聚合+Aggregation+示例

    ElasticSearch+聚合+Aggregation+示例 聚合提供了分组并统计数据的能力.理解聚合的最简单的方式是将其粗略地等同为SQL的GROUP BY和SQL聚合函数.在Elasticsea ...

  5. mongodb模糊查询_我叫Mongo,收了「查询基础篇」,值得你拥有

    这是mongo第二篇「查询基础篇」,后续会连续更新6篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通过上一篇基础篇的介 ...

  6. ES中如何实现类似having的先聚合再过滤查询

    一.问题描述: 在mysql数据库中,我们可以很方面的通过having关键字实现对聚合结果的过滤查询.那么,在ES中该如何实现类似having的先聚合再过滤查询呢? 二.业务场景: 需要找出下单次数大 ...

  7. 独家 | 使用机器学习加速对非结构化数据的查询-第1部分(使用BlazeIt加速聚合和限制查询)...

    作者:Daniel Daniel,Peter Bailis和Matei Zaharia 翻译:Kay 校对:王雨桐 本文约2800字,建议阅读13分钟. 本文为大家介绍了针对非结构化数据如何加快聚合和 ...

  8. hibernate 高级查询 query 或查询 or ,Restrictions

    hibernate 高级查询 query 或查询 or ,Restrictions 今天用了写hibernate高级查询时用了Restrictions(当然Expression也是可以以的)这个类.感 ...

  9. SQVI和SAP查询QUERY的区别和使用注意事项

    SQVI.SAP查询QUERY都适用于简单的表连接数据查询,但都不能打包传输到PRD,不同环境需要重复创建.可以生成报表程序供T-CODE调用,用se93指定事务码和程序名称.区别1-权限:SQVI每 ...

最新文章

  1. 北京工业大学计算机科学与技术学科评估,本次学科评估进步最大学校之一——北京工业大学...
  2. angular cli全局版本大于本地版本 把本地版本升级方式
  3. nginx 错误502 upstream sent too big header while reading response header from upst
  4. Faceware 面部捕捉在Unity中的应用
  5. 中原标准时间对时_GPS对时系统(时间同步系统)应用电子政务
  6. 工作流实战_08_flowable 流程实例的启动
  7. VSCode 实时预览HTML网页效果 - Live Server插件
  8. 高性能web系统的架构和系统优化
  9. pycharm appiunm 公众号测试_知道答案公众号_知到APP笔尖上的艺术——书法基础与赏析单元测试答案_知道答...
  10. Linux运维常用脚本整理
  11. 程序员必备,C#各类项目、开源项目插件资料收藏
  12. lme4:用于混合效应模型分析的R包
  13. 描述性统计分析案例题_SPSSAU描述性分析指标如何选择?
  14. 样本均值的特征与分布
  15. Dream(励志英文演讲)
  16. STM32硬件SPI时钟频率与时钟解析(基于逻辑分析仪的抓包试验)
  17. Scrapy学习记录
  18. 飞翔的红蜻蜓(浙理体育)——生成跑步数据并上传
  19. win10-LTSC2019装机必备操作和软件备忘录
  20. 如何脱离USB给ESP8266下载程序?

热门文章

  1. 鸿蒙如何连接电视,鸿蒙系统首秀,在自家设备上和普通电视大不相同
  2. php 二维数组去除一项,PHP二维数组提取函数----把不需要的数据剔除
  3. VB.NET 读写HTML 文件,VB.NET 简单介绍文件的读写----流类
  4. yaf index.php,yaf框架访问路由为什么始终访问INDEX下的INDEX控制器下的INDEX方法
  5. 双目测距(四)--罗德里格斯变换
  6. matlab设置ga算法,matlab遗传算法ga函数
  7. java什么是适配器类?作用是什么?_浅谈Java适配器模式
  8. Hbase如何实现增删查改?
  9. Secret 的使用场景 - 每天5分钟玩转 Docker 容器技术(109)
  10. SD-WAN(软件定义WAN)