当前位置: 首页 > 编程日记 > 正文

8天学通MongoDB——第三天 细说高级操作

原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html

今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标。

一: 聚合

常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce。

<1> count

count是最简单,最容易,也是最常用的聚合工具,它的使用跟我们C#里面的count使用简直一模一样。

<2> distinct

这个操作相信大家也是非常熟悉的,指定了谁,谁就不能重复,直接上图。

<3> group

在mongodb里面做group操作有点小复杂,不过大家对sql server里面的group比较熟悉的话还是一眼

能看的明白的,其实group操作本质上形成了一种“k-v”模型,就像C#中的Dictionary,好,有了这种思维,

我们来看看如何使用group。

下面举的例子就是按照age进行group操作,value为对应age的姓名。下面对这些参数介绍一下:

key:  这个就是分组的key,我们这里是对年龄分组。

initial: 每组都分享一个”初始化函数“,特别注意:是每一组,比如这个的age=20的value的list分享一个

initial函数,age=22同样也分享一个initial函数。

$reduce: 这个函数的第一个参数是当前的文档对象,第二个参数是上一次function操作的累计对象,第一次

为initial中的{”perosn“:[]}。有多少个文档, $reduce就会调用多少次。

看到上面的结果,是不是有点感觉,我们通过age查看到了相应的name人员,不过有时我们可能有如下的要求:

①:想过滤掉age>25一些人员。

②:有时person数组里面的人员太多,我想加上一个count属性标明一下。

针对上面的需求,在group里面还是很好办到的,因为group有这么两个可选参数: condition 和 finalize。

condition:  这个就是过滤条件。

finalize:这是个函数,每一组文档执行完后,多会触发此方法,那么在每组集合里面加上count也就是它的活了。

<4> mapReduce

这玩意算是聚合函数中最复杂的了,不过复杂也好,越复杂就越灵活。

mapReduce其实是一种编程模型,用在分布式计算中,其中有一个“map”函数,一个”reduce“函数。

① map:

这个称为映射函数,里面会调用emit(key,value),集合会按照你指定的key进行映射分组。

② reduce:

这个称为简化函数,会对map分组后的数据进行分组简化,注意:在reduce(key,value)中的key就是

emit中的key,vlaue为emit分组后的emit(value)的集合,这里也就是很多{"count":1}的数组。

③ mapReduce:

这个就是最后执行的函数了,参数为map,reduce和一些可选参数。具体看图可知:

从图中我们可以看到如下信息:

result: "存放的集合名“;

input:传入文档的个数。

emit:此函数被调用的次数。

reduce:此函数被调用的次数。

output:最后返回文档的个数。

最后我们看一下“collecton”集合里面按姓名分组的情况。

二:游标

mongodb里面的游标有点类似我们说的C#里面延迟执行,比如:

var list=db.person.find();

针对这样的操作,list其实并没有获取到person中的文档,而是申明一个“查询结构”,等我们需要的时候通过

for或者next()一次性加载过来,然后让游标逐行读取,当我们枚举完了之后,游标销毁,之后我们在通过list获取时,

发现没有数据返回了。

当然我们的“查询构造”还可以搞的复杂点,比如分页,排序都可以加进去。

var single=db.person.find().sort({"name",1}).skip(2).limit(2);

那么这样的“查询构造”可以在我们需要执行的时候执行,大大提高了不必要的花销。

转载于:https://www.cnblogs.com/longshiyVip/p/4770944.html

相关文章:

UVA 10954 Add All

UVA_10954 看了别人解题报告之后发现累加的过程可以这样操作&#xff0c;每次取最小的两个元素加和&#xff0c;然后把和当作一个新元素放进集合&#xff0c;直到剩下一个元素&#xff0c;然后把中间结果加起来就是要求的结果。实际上这个题目就是哈弗曼编码&#xff0c;在LRJ树…

Java将mysql输出csv,如何从Java中的Access数据库导出表并将其保存到.csv

I am trying to export a lot of large tables from a MS Access db with java using the jdbc:odbc bridge. I wanted to save these tables to a CSV file first was wondering what would the best way to do this would be? any help would be appreciated.解决方案Fetch …

windows下nodejs express安装及入门网站,视频资料,开源项目介绍

windows下nodejs express安装及入门网站,视频资料&#xff0c;开源项目介绍&#xff0c;pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步&#xff1a;下载安装文件下载地址&#xff1a;官网http://www.nodejs.org/download/ 第二步&#xff1a;安装nodejs下载完…

python 之 pip、pypdf2 安装与卸载

pip是个啥&#xff1f; pip 是一个现代的&#xff0c;通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。 第一步&#xff1a;pip 下载&#xff1a;https://pypi.org/project/pip/#files 第二步&#xff1a;解压&#xff0c;进入目录python pip\pi…

eclipse 3.55安装j2ee开发工具

选择help--->install new software -->work width --选择下拉框选择要安装插件转载于:https://www.cnblogs.com/yjhrem/articles/2309602.html

mysql中没有内置函数_[mysql]MySQL中的内置函数

用在select 语句&#xff0c;以及子句where order by hacing 中 update delete函数中可以将字段名作为字段来用&#xff0c;变量的值就是这个列对应的每一行记录。一、字符串函数php中用到的函数&#xff0c;mysql中大部分也提供了1、CONCAT(”字符串”,字段&…

tiny210V2 Uboot kernel filesystem 烧写和启动

1.sd启动 将u-boot镜像写入SD卡 将SD卡通过读卡器接上电脑&#xff08;或直接插入笔记本卡槽&#xff09;&#xff0c;通过"cat /proc/partitions"找出SD卡对应的设备&#xff0c;我的设备节点是/dev/sdb.执行下面的命令$sudo dd iflagdsync oflagdsync iftiny210-ub…

Linux下Shell日期的格式

2019独角兽企业重金招聘Python工程师标准>>> 不管是哪种语言&#xff0c;日期/时间都是一个非常重要的值。比如我们保存日志的时候&#xff0c;往往是某个前缀再加上当前时间&#xff0c;这样日志文件名称就可以做到唯一。在Shell环境里&#xff0c;我们获取时间的命…

usaco 6.1

6.1.2 rectbarn 首先要注意空间的消耗,3000*3000 大概10m的样子(最多16m),只够开个char,本想套用big barn的dp方法,定义struct [i,j]{int l;int h}来表示以(i,j)为右上顶点的矩形,貌似这样会爆,只好考虑其它解法(参考wc2003王知昆的论文). 大概思路: 定义h[i,j],l[i,j],r[i,j]分…

docker mysql详解_Docker轻松入门(详解)

一 Docker简介Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙…

[恢]hdu 2014

2011-12-12 05:46:08 地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2014 题意&#xff1a;中文题。 mark&#xff1a;wa了3次&#xff01;&#xff01;&#xff01;因为敲错变量&#xff01;&#xff01;&#xff01;min敲成了num&#xff0c;各种二。可能是困了…

java在继承中父类的成员变量是否会被子类所覆盖

假如 父类 int num 7&#xff1b;子类 int num 9&#xff1b;父类是否会被子类所覆盖? 给你看两个例子&#xff1a; 第一个例子&#xff1a; 第二个例子&#xff1a; 这两个例子的区别只有一句话 由此证明了子类从父类继承的时候 如果有同名的成员变量 默认情况下 父类的成…

长连接及在Node中的应用——HTTP/1.1 keep-alive

HTTP请求都要经过TCP三次握手建立连接&#xff0c;四次分手断开连&#xff0c;如果每个HTTP请求都要建立TCP连接的话是极其费时的&#xff0c;因此HTTP/1.1中浏览器默认开启了Connection: keep-alive。 请求头中的这个属性的作用可以在请求完成后&#xff0c;保持TCP连接一段时…

python 桑基图 地理坐标_【转载】Python数据可视化-实现Sankey桑基图

根据不完整统计&#xff0c;90%想用sankey图的朋友都是因为被它炫酷的外表所吸引&#xff0c;举个例子&#xff1a;在这里插入图片描述关于sankey图的定义是这样描述的&#xff1a;即桑基能量分流图&#xff0c;也叫桑基能量平衡图。它是一种特定类型的流程图&#xff0c;图中延…

[恢]hdu 2015

2011-12-14 05:49:09 地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2015 题意&#xff1a;中文&#xff0c;忒麻烦了。 代码&#xff1a; # include <stdio.h>int main (){int n, m, flag ;int i, sum, cnt ;while (~scanf ("%d%d", &n, &a…

http://www.shanghaihaocong.com-WORDPRESS开发的企业主题站

wordpress是世界上使用最多的php开源博客系统&#xff0c;功能强大&#xff0c;而且拥有众多的插件&#xff0c;可扩展性强。 最近&#xff0c;我也用它做了一个企业网站&#xff0c;欢迎浏览&#xff1a;http://www.shanghaihaocong.com&#xff0c;上海灏璁实业有限公司转载于…

蓝桥杯 扑克序列(全排列)

扑克序列 A A 2 2 3 3 4 4&#xff0c; 一共4对扑克牌。请你把它们排成一行。要求&#xff1a;两个A中间有1张牌&#xff0c;两个2之间有2张牌&#xff0c;两个3之间有3张牌&#xff0c;两个4之间有4张牌。 请填写出所有符合要求的排列中&#xff0c;字典序最小的那个。 例如&a…

tensorflow with求导_3.4tensorflow2.x自动求导原理函数详解

自己开发了一个股票智能分析软件&#xff0c;功能很强大&#xff0c;需要的点击下面的链接获取&#xff1a;1.1 tensorflow2.x自动求导1.1.1 自动求导GradientTape类GradientTape的作用就是用于自动求导&#xff0c;需要有自变量x和因变量y&#xff0c;调用gradient(y…

WinRAR也能实现智能备份

日志 唐山郎&#xffe5; 一切随缘,顺其自然.加博友 关注他 最新日志 2012年意味着机会还是灾难墙壁网线插座的接法佛度有缘人我~想~你&#xff0c;但不。会找你asp.net"服务器应用程序不可超惊艳! 古装美女超精美剪辑该作者的其他文章 博主推荐 相关日志 随机阅读 首页推…

MediaCodeC解码视频指定帧,迅捷、精确

原创文章&#xff0c;转载请联系作者 若待明朝风雨过&#xff0c;人在天涯&#xff01;春在天涯 原文地址 提要 最近在整理硬编码MediaCodec相关的学习笔记&#xff0c;以及代码文档&#xff0c;分享出来以供参考。本人水平有限&#xff0c;项目难免有思虑不当之处&#xff0c;…

threejs 绘制球体_ThreeJs 绘制点、线、面

所有的三位物体都是由点构成&#xff0c;两点构成线&#xff0c;三点构成面&#xff0c;ThreeJs又如何绘制出点、线、面呢 &#xff1f;在ThreeJs中&#xff1a;模型由几何体和材质构成模型以何种形式(点、线、面)展示取决于渲染方式1. 几何体首先我们来创建一个自定义的几何体…

model多表操作

一. 创建模型 from django.db import models# Create your models here.#比较常用的作者信息放到这个表里面 class Author(models.Model): id models.AutoField(primary_keyTrue)namemodels.CharField(max_length32)agemodels.IntegerField()authorDetailmodels.OneToOneField…

cocos2d-x注意事项(十)Lua发展飞机战争-4-创建主角

二战中被称为二战飞机飞机&#xff0c;当然&#xff0c;以飞机作业。这是一个游戏&#xff0c;我们必须加入一个飞机——这是我们的英雄。 首先创建一个层&#xff08;PlaneLayer&#xff09;要显示飞机。然后&#xff0c;create飞机初始化方法 module("PlaneLayer",…

.PHONY makefile中的伪目标

拿clean举例&#xff0c;如果make完成后&#xff0c;自己另外定义一个名叫clean的文件&#xff0c;再执行make clean时&#xff0c;将不会执行rm命令。 为了避免出现这个问题&#xff0c;需要.PHONY: clean所谓伪目标就是这样一个目标&#xff0c;它不代表一个真正的文件名&…

jq父级绑定事件的意义_jq——事件

$(document),$(body)加载事件&#xff1a;$(document).ready(fn)$(document).ready(function(){ alert("这是加载事件"); });简写&#xff1a;$(function(){});工作中简写比较多js:window.οnlοadfn 把页面上的DOM和资源加载完成之后执行jq:$(document).ready(fn)…

美妆彩妆宣传PPT模板

还有四天就是三八妇女节了&#xff0c;相信有不少从事美妆美容行业的工作者也要开始对产品的一个宣传简介了&#xff0c;对外进行一番交流配上一份优秀的PPT模板是再好不过的了。今天办公资源要和大家分享的PPT模板是可用于美妆美容美发行业的工作策划&#xff0c;总结汇报等。…

报表性能优化方案之报表服务器优化基础讲解

内存 JVM堆栈内存是决定应用服务器性能的关键指标&#xff0c;一般服务器默认的内存配置都比较小&#xff0c;在较大型的应用项目中&#xff0c;这点内存是不够的&#xff0c;因此需要进行查看与修改Web服务器内存大小&#xff0c;接下来就介绍服务器内存查看的方法以及不同服务…

windows下git bash乱码问题

网上有很多相关资料&#xff0c;备份一下&#xff1a; 1,/etc/gitconfig&#xff1a;[gui] encoding utf-8 #代码库统一用urf-8,在git gui中可以正常显示中文[i18n] commitencoding GB2312 #log编码&#xff0c;window下默认gb2312,声明后发到服务器才不会乱码[svn] …

python tcp server分包_如何创建线程池来监听tcpserver包python

我试图创建线程池来同时对传入的tcp包执行一些操作。在我在python3中找不到任何内置线程池。我也读了一些关于multiprocessing.Pool的文章&#xff0c;但是它不支持内存共享。所以我使用Queue来模拟线程池。在为每个线程创建一个队列是否更好&#xff1f;有没有人有建议或更好的…

R语言 股价分析

首先判断股价的分布是不是正态分布: #获取3m公司收盘价 mmmdata read.csv("E:\\kuaipan\\A Introduction to Analysis of Financial Data with R\\chapter 1\\ch1data\\d-mmm-0111.txt",header T) mmmprice as.numeric(sapply(mmmdata, function(l){substring(l,1…