函数分组学通MongoDB——第三天 细说高级操作

改章节个人在广东喝咖啡的时候突然想到的...明天就有想写几篇关于函数分组的文章,所以回家到后之就奋笔疾书的写出来发布了

    明天跟大家分享一下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/jiangu66/archive/2013/05/01/3053009.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eps如何建立立体白模_服装立体裁剪教程 结构都是“立裁”出来的 才智服装

核心提示&#xff1a;基础立裁服装立体裁剪是指用白坯布为常用替代物&#xff0c;在人台上直接塑造服装样式&#xff0c;并进行样板制作的技术。由于立体裁剪是设计师主要依靠视觉进行的直观操作的过程&#xff0c;所以它具有激发和展开新的设计思维的功能。一、基础立裁服装立…

平衡抽象原理

使代码复杂易读和理解的一件事是&#xff0c;方法内部的指令处于不同的抽象级别。 假设我们的应用程序仅允许登录用户查看其朋友的旅行。 如果用户不是朋友&#xff0c;则不会显示任何行程。 一个例子&#xff1a; public List<Trip> tripsByFriend(User user, User l…

python编写姓名年龄_python小工具 - alert弹框输出姓名年龄、求和

# 导入tkinter的所有的包里面所有的内容from tkinter import *import tkinter.messageboxasmessagebox# 从Frame派生一个Application类&#xff0c;这是所有Widget的父容器classApplication(Frame):def __init__(self,masterNone):Frame.__init__(self,master)self.pack()self.…

IIS后台网站部署不支持PUT方法 405错误

在web.config文件中添加如下代码&#xff1b;删除模块WebDAVModule <system.webServer><modules runAllManagedModulesForAllRequests"true" runManagedModulesForWebDavRequests"true"><remove name"WebDAVModule"/></mod…

IntelliJ IDEA内部设计

IntelliJ IDEA的第一版于2001年1月发布&#xff0c;当时它是第一个集成了高级代码导航和代码重构功能的Java IDE之一。 2009年&#xff0c;JetBrains开源了其社区版本 。 从那时起&#xff0c;创建了许多基于它的IDE&#xff0c;例如Google的Android Studio。 让我们使用JArc…

TDD:MS自带的单元测试 之 线程模型和执行顺序

背景 我一直在呼喊“不要靠假设编程”&#xff0c;可是我却常常这么做。我用单元测试就是一种基于假设进行编程的反面教材&#xff0c;今天就下决心弄明白它。 主要想弄明白两个问题&#xff1a; 执行的所有单元测试方法的线程模型&#xff0c;是单线程&#xff1f;是多线程&am…

JS下载图片保存在本地

const imgUrl "";// 图片链接const a document.createElement(a);// 这里是将url转成blob地址&#xff0c;fetch(imgUrl) // 跨域时会报错.then(res > res.blob()).then(blob > { // 将链接地址字符内容转变成blob地址a.href URL.createObjectURL(blob);a.…

bat文件名操作_Excel按文件名制作目录,你复制粘贴花一小时,同事只要十秒搞定...

Excel有个特殊操作&#xff0c;那就是对文件夹中上百个文件&#xff0c;用Excel按照文件名制作目录&#xff0c;我们只需要点击对于的超链接就可以快速打开对于的文件。如上图所示&#xff0c;我们的文件夹中包含有26个视频和Excel文件&#xff0c;因为文件数量过多所以我们需要…

整数返回poj1005——I Think I Need a Houseboat

这两天一直在研究整数返回之类的问题,上午正好有机会和大家讨论一下. 原题&#xff1a; Description Fred Mapper is considering purchasing some land in Louisiana to build his house on. In the process of investigating the land, he learned that the state of Louisia…

偷窥JCache API(JSR 107)

这篇文章从较高的层次介绍了JCache API&#xff0c;并提供了一个预告片–刚够您&#xff08;希望&#xff09;开始对此发痒&#xff1b;-) 在这篇文章中...。 JCache概述 JCache API&#xff0c;实现 JCache API支持的&#xff08;Java&#xff09;平台 快速了解Oracle Coh…

electron IPC通信报错Uncaught (in promise) Error: An object could not be cloned.

项目场景&#xff1a; electronreact 问题描述 electron 中用IPC通信 Uncaught (in promise) Error: An object could not be cloned. e Error: An object could not be cloned.at EventEmitter.i.invoke (node:electron/js2c/sandbox_bundle:33)at uploadImg (YakitPluginI…

Linux C中发现无法连接到math.h中的数学函数解决办法

Linux 下使用数学函数 今天在编译一个用到log函数的c文件时&#xff0c;遇到一个错误&#xff1a;/tmp/ccQuh0ns.o(.text0x2bb): In function Compute:: undefined reference to log到网上查了一下这个问题&#xff0c;原因及解决方法如下&#xff1a;出现这个错误是因为编译器…

canvas 圆角矩形填充_一篇文章让你学会你最“害怕”的Canvas,太有意思了

Canvas画布 基本用法<canvas idcanvas width"150" height"150"></canvas> <canvas>看起来跟img标签有点像&#xff0c;唯一不同的是它没有src属性和alt属性。实际上&#xff0c;canvas标签只有两个属性:width和height。 如果没有设置宽度…

通过流而不是列表

开幕式免责声明&#xff1a;这并不总是一个好主意。 我将介绍这个主意&#xff0c;以及为什么它是一个好主意的一些原因&#xff0c;但随后我将讨论一些不太理想的实例。 懒惰 如您所知&#xff0c;我在Python中涉猎的程度几乎与在Java中一样。 我一发现Python就很喜欢生成器。…

react-infinite-scroll-component 第二次加载无法触发next

react-infinite-scroll-component 是一款滚动加载插件&#xff0c;在页面滚动的时候加载数据&#xff0c;在使用过程遇到一个坑。 坑的描述&#xff1a; 在页面滚动的时候&#xff0c;infiniteScroll页面数是自动1,打个比方说&#xff0c;页面加载到第三页&#xff0c;infinit…

linux查看文件大小和查看磁盘使用情况

1、df -h 显示目前所有文件系统的可利用空间及和使用情况。参数 -h表示人类可以看懂的格式输出 2、du -h --max-depth1 目录 查询指定文件夹下各个文件夹或文件的大小 3、du -sh test/ 或 du -sm * |sort -n 查看文件目录的大小和数量&#xff0c;并且可以按大小排序 du和df的…

abaqus单位_ANSYS和ABAQUS哪个好,一个例子告诉你

分别用ANSYS和ABAQUS来分析同一个题目并考察其异同点。【问题】一根悬臂梁&#xff0c;长200mm,截面是30mm*20mm的矩形(高度方向是20mm)。该梁左端固定&#xff0c;在其上面施加向下的分布力系&#xff0c;载荷集度是0.6Mpa.已知材料使用低碳钢&#xff0c;弹性模量是200GPA&am…

electron nodejs上传文件获取文件流

使用antd upload组件&#xff0c;electron中ipcRenderer.invoke无法传递文件流&#xff1b; 传文件路径过去&#xff0c;然后使用nodejs获取文件流 // 创建数据流const readerStream fs.createReadStream(path)const formData new FormData()formData.append("file_name…

使用junit做其他事情

junit&#xff01;单元测试 Junit是Java单元测试框架。 通常&#xff0c;我们将其用于单元测试&#xff0c;但是很多时候我们也使用它来执行集成测试。 主要区别在于&#xff0c;单元测试可测试单个单元&#xff0c;而集成测试则可测试不同类如何协同工作。 这样&#xff0c;集…

转行python能拿到多少钱_想转行学python过来人提醒大家几点

因为目前python非常火&#xff0c;应用也非常广泛&#xff0c;是目前最火的行业之一&#xff0c;竞争很大&#xff0c;工资很高&#xff0c;未来发展也极好。Python 现在到底有多热呢&#xff1f;我觉得我们可以看以下的这2组数据。第一&#xff1a;Python 排名稳居前五得益于 …