版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34376435/article/details/88865283
db.c.count() 返回集合中的文档数量
db.runCommand({“distince”:“c”,“key”:“age”}) 获得指定集合中给定键的不同值
db.test.group({
$keyf:function(doc){return {age:doc.age};}, %%指定分组依据的键,也可以这样用:"key":"age"
initial:{num:0},%%每一组reduce函数调用的初始数据
$reduce:function(doc,prev){prev.num++}, 系统的两个参数,当前文档以及累加器文档,
condition:{age:{$gt:2}}, 执行的过滤文档
finalize:function(doc){doc.count=doc.num;delete doc.num} reduce完成后,结果集返回之前对结果集执行的最终函数,可选
})
使用mapreduce必须实现两个函数,Map函数和Reduce函数,map函数调用emit(key,value)遍历collection中所有记录,将key和value传递给Reduce函数进行处理。
参数说明:
- map :映射函数 (生成键值对序列,作为 reduce 函数参数)。
- reduce 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。
- out 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
- query 一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)
- sort 和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
- limit 发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)
db.test.mapReduce(
function() {emit(this.name,this.num)},
function(key,values) {return Array.sum(values)},
{query:{age:{"$gt":2}},out:"output"}
)