快捷搜索:

8天学习MongoDB 专题——第三天 细说高级操作

本日跟大年夜家分享一下mongodb中对照好玩的常识,主要包括:聚合,游标。

一: 聚合

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

count

count是最简单,最轻易,也是最常用的聚合对象,它的应用跟我们C#里面的count应用的确如出一辙。

distinct

这个操作信托大年夜家也是异常认识的,指定了谁,谁就不能重复,直接上图。

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也便是它的活了。

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);

那么这样的“查询构造”可以在我们必要履行的时刻履行,大年夜大年夜前进了不需要的花销。

您可能还会对下面的文章感兴趣: