MongoDB系列——中级篇
文章目录
MongoDB系列——中级篇
查找并修改(findAndModify)
1 | db.collection.findAndModify({ |
单一用途的聚合
count
1 | $ db.person.count() |
distinct
1 | $ db.person.distinct("name") |
group
key: 表示要分组的key
initial:表示每组都分享的一个"初始化函数"
$reduce:第一个参数为当前文档对象,第二个参数是上次function操作的累计对象
finalize:每一组文档执行完后,都会触发此方法
condition: 过滤条件
1 | db.collection.group({ |
映射化简(mapReduce)

1 | db.collection.mapReduce( |
- map:map函数
- reduce:reduce函数
- out:输出结果的collection的名字,不指定会默认创建一个随机名字的collection(如果使用了out选项,就不必指定keeptemp:true了,因为已经隐含在其中了)
- query:一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)
- sort:和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
- limit:发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)
- keytemp:true或false,表明结果输出到的collection是否是临时的,如果想在连接关闭后仍然保留这个集合,就要指定keeptemp为true,如果你用的是MongoDB的mongo客户端连接,那必须exit后才会删除。如果是脚本执行,脚本退出或调用close会自动删除结果collection
- finalize:是函数,它会在执行完map、reduce后再对key和value进行一次计算并返回一个最终结果,这是处理过程的最后一步,所以finalize就是一个计算平均数,剪裁数组,清除多余信息的恰当时机
- scope:javascript代码中要用到的变量,在这里定义的变量在map,reduce,finalize函数中可见
- verbose:用于调试的详细输出选项,如果想看MpaReduce的运行过程,可以设置其为true。也可以print把map,reduce,finalize过程中的信息输出到服务器日志上。
在这个映射化简操作中,MongoDB对每个输入文档(例如集合中满足查询条件的文档)执行了map操作。映射操作输出了键值对结果。对那些有多个值的关键字,MongoDB执行reduce操作,收集并压缩了最终的聚合结果。然后MongoDB把结果保存到一个集合中。化简函数还可以把结果输出到finalize函数,进一步对聚合结果做处理,当然这步是可选的。
【未完待续】

