MongoDB-分页,聚合函数,mapRedcue,游标
来源:互联网 发布:网络p2p理财产品 编辑:程序博客网 时间:2024/05/17 22:34
一 前言
与关系型数据一样,NoSQL数据也存在数据分页,聚合操作,函数,游标等,来完成一些复杂的数据操纵。除此之外,也有一些分布式下的支持,如MongoDB中的Map,Reduce等,这些都会大数据的处理提供了安全,一致,高效的保证,下面为大家介绍MongoDB的高级操作
二 理论及应用
(1) 数据查询分页,与MySQL,Oracle不同的是,MongoDB的分页是通过函数来实现:SKIP,limit,功能相似。
SKIP(startIndex),startIndex:指查询数据集合的起始位置。
limit(pageSize),pageSize:数据查询分页的大小。
db.stu.find({$and:[{"username":{$ne:"Jerry"}},{"age":{$ne:20}}]}).skip(2).limit(10);; 查询出stu集合中username!=Jerry,且年龄大于20,并从第3(下标起始位0)条显示,每次分10条显示。
db.stu.find({$and:["username":{$ne:"Sherry"}},{"age":{$gte:20}}]}).skip(2).limit(10); 查询出username!= "Sherry"且年龄不小于20的数据集合,从第三个,按每页10条显示
(2)聚合函数:count,distinct,group,mapReduce
count,distinct::与关系型数据一样,支持相应的统计操作。
db.stu.count({"age":{$gte:40}}): 统计年龄不小于40的集合。
db.stu.count({$and:[{"username":{$ne:"Jerry"}},{"age":{$gt:20}}]}); 统计名字不是“Jerry”,年龄大于20的集合
db.stu.distinct("age"); 统计所有的年龄,剔除重复的
(3)与SQL分组一样,也是要根据一些条件,进行分组,不同的是,MongoDB是以函数进行,并且分组依据,初始筛选集合对象,处理函数(reduce),筛选条件,结果处理等都是分开设置。
"key"::分组依据(通SQL的group by 后的字段)
“initial”: 进行分组操作的对象集合
“condition”:额外的筛选条件
"$reduce":function(arg1,arg2){} arg1:当前操作的文档对象 arg2:上一次函数操作的累计对象
“finalize” :每次Reduce函数执行后,会执行该函数,可以用来进行统计和其他操作
db.stu.group({
.. "key":{"age":true},
.. "initial":{"stu":[]},
.. "reduce":function(doc,out){
.. out.stu.push(doc.username);
.. },
.. "condition":{"age":{$gt:40}},
.. "finalize":function(out){
.. out.count = out.stu.length;
.. }
.. })
.. "key":{"age":true},
.. "initial":{"stu":[]},
.. "reduce":function(doc,out){
.. out.stu.push(doc.username);
.. },
.. "condition":{"age":{$gt:40}},
.. "finalize":function(out){
.. out.count = out.stu.length;
.. }
.. })
(4)mapReduce
map是映射函数,里面会调用emit(key,value),集合会按照你的key进行映射分组。
Reduce是数据处理,在分布式的环境下,对数据进行重新映射分组,
map = function(key,value){
... emit(this.username,{count:1});
... }
... emit(this.username,{count:1});
... }
function (key,value){
emit(this.username,{count:1});
}
reduce = function(key,value){
... var result = {count:0};
... for(var i=0;i<value.length;i++){
... result.count += value[i].count;
... }
... return result;
... }
... var result = {count:0};
... for(var i=0;i<value.length;i++){
... result.count += value[i].count;
... }
... return result;
... }
function (key,value){
var result = {count:0};
for(var i=0;i<value.length;i++){
result.count += value[i].count;
}
return result;
}
//使用mapReduce进行数据分组
db.stu.mapReduce(map,reduce,{"out":"collection"})
//查看分组后的结果
db.collection.find()
(5)游标:和数据一样,用来存取数据库查询中间结果或临时数据,进行再加工。
var cursor = db.stu.find({$or:[{"username":{$ne:"Jerry"}},{"age":{$gt:20}}]}) :将username!=“Jerry”,age>20的结果放入游标,用于进一步处理
三 总结
总的来说,MongoDB和关系数据的分页查询,聚合操作,函数处理,游标有相似之处,但是有其强大之处,尤其mapreduce,在大数据量的操作占据优势,另外类似JS的函数编程方式,也易于理解,使用。
0 0
- MongoDB-分页,聚合函数,mapRedcue,游标
- mongodb 高级操作:聚合,游标
- MongoDB——聚合 && 游标
- mongodb聚合函数aggregate操作 分组分页查询统计
- mongodb 聚合函数
- MongoDB 聚合函数
- mongodb聚合函数操作
- mongodb的高级操作(游标、聚合)
- MongoDB的分页、排序、游标
- MongoDB分页、排序与游标
- mongodb-利用游标实现分页
- nosql mongodb 学习-----第三天 高级操作之聚合函数、游标、去重复及分组
- MongoDB:详细解释mongodb的高级操作,聚合和游标
- MongoDB的聚合函数 Aggregate
- MongoDB的聚合函数 Aggregate
- mongodb-aggregate(聚合函数)
- java 操作mongodb 聚合函数
- Mongodb高级查询Aggregation聚合组件分页
- SQL求和一个表之后和另一个表数据进行关联
- iOS 将text文本转为image
- 第4周项目5-猴子选大王
- Python 正则match
- Web开发须知的浏览器内幕 缓存与存储篇(1)
- MongoDB-分页,聚合函数,mapRedcue,游标
- 数据库逆向框架代码生成工具:MyBatis Generator的使用
- 算法之LCA与RMQ问题
- [Android知识体系]之四大组件:service(完全解析上)
- Linux基础二
- 将功赎罪
- linux程序设计:第七章 数据管理
- java连接linux里的redis数据库报:Could not get a resource from the pool解决方法
- 深入浅出commoms-pool2对象池