第六讲mongodb中的聚合,分组,去重,和固定集合
mongodb中的聚合,分组,去重,和固定集合
今天我们来分享一下 mongodb中的分组,去重和聚合
首先我们来造一些数据,数据如下
- 查找表中我们一共有多少数据 count方法:这个比较简单
db.tty.count()
可以看到我们的表里面有16条记录
- mongodb中的去重,
- 在mongodb中去重需要两个参数,第一个是要去重的表,第二个是去重字段
db.tty.runCommand({distinct:"tty",key:"name"});
distinct:是去重的表,key:是要去重的字段
然后我们看一下 返回的结果
这样看着 数据不太明显,哪我们取她的values看一下
db.tty.runCommand({distinct:"tty",key:"name"}).values
可以很明显的看到,已经对我们的数据去重了
- 数据的分组group方法,
下面我要查询一下name相同的人的年纪,比添加一句话,”hello”
db.tty.group({
"key":{ "name" :true},
"initial":{ "perven" :[]},
"$reduce":function(cur,perv){
perv.perven.push(cur.age);
},
"condition":{age:{$gt:27}},
"finalize":function(out){
- out.show="hello"
}
})
执行结果如下
这个分组里面有很多的字段;
Key:{name:true}这个是以哪个字段分组
Initial:{“perven”:[]},这个是分组的累计器,每组一个
$reduce:这个就是表里每一个文档,每一个文档都会执行一次,很多操作都可以放到这个里面
上面哪三个就是必须有的了,下面几个是我们的过滤的东西
Condition:{age:{$gt:27}};这个是过滤器,过滤掉小于27的
Finalize:function():注意这个是和上面的$reduce相对的这个是每一组执行完成之后执行一次,注意是每一组执行完
上面就是我们的group分组操作的方法了,大家可以根据自己的需要quue;
2.mongodb中的命令执行器:
比如我们上面的操作还可以这样写
db. tty.runCommand({group:{
ns: "tty",
key:{ "name" :true},
initial:{ "perven" :[]},
$reduce:function(cur,perv){
perv.perven.push(cur.age);
},
condition:{age:{$gt:27}},
finalize:function(out){
- out.show="hello"
}
}})
可以看到返回的结果是一样的
- 下面我们来说一下固定集合
固定集合默认没有任何索引,
固定集合由于是固定的不需要重新分配内存空间所以查询和插入非常的快,
但是由于是固定大小,大不确定数据大小的数据不太方便,
比较适合做一些内确定有多少数据的,高查询的数据库
声明一个固定集合方法
db.createCollection("yjw",{size:1000,capped:true,max:10})
其中的”yjw”这个是集合的名称;
Size:是集合的大小,
Max:是文档的规定能存入多少条数据
Capped:是否是固定集合
注意我们的新建的固定集合用show dbs 是看不到的
但是我们可以通过vue来看一下
大家可以看到我们的 固定几个已经建立了,至于使用和一般的集合一样
吧一个集合转化为固定集合
db.runCommand({convertToCapped:"tty",size:10000})
最后我们讲一下倒序查:查询器是$natural:
db.tty.find().sort({$natural:-1})
$natural:-1,是倒序,$natural:1是正序,注意这里的倒序和正序和排序中的不一样,这
个是倒序是直接查的文档的开始和结束位置