Mongodb笔记(三)user && aggregate && mapReduce
版本:mongodb3.4。
User:
mongodb使用验证登录;默认不开启,mongod中使用--auth开启:
mongod -port=3000 --auth ;
基本方法:
- db.createUser({
- user:username,
- pwd:passwd,
- roles:[ {role: ' readWrite' , db : 'db1'} ] //定义这个用户对应db的权限。
- });
- db.updateUser(username,{
- pwd:'',
- roles:[]
- })
- db.dropUser(username);
- db.changeUserPassword(username,newpswd);
具体roles:参见
在mongod开启验证前先在默认模式下,创建超级用户:
mongo:
use admin;
db.createUser({user : 'myRoot' , pwd: '***' , roles: [ role:'root' , db:'admin' ] });
在创建好超级用户后,再开启mongod的验证模式,这样以后就能考靠这个超级用户来创建其他用户了。
登录mongod:
mongo -port=3000 -username=myRoot -password= *** -authenticationDataBase=admin
authenticationDataBase ,指定你登录的DataBase.
另一种方法:
mongo -port=3000;
use admin;
db.auth('myRoot','***');
登录后因为你是超级用户所以可以创建其它用户,并指定权限。
mongodb在用户登录时,使用明文传输数据。建议使用TSL。
Aggregate:
Instance:
db.test.aggregate([
{$match: {city: 'shanghai' }}, //匹配城市是上海的人。
{$limit:5}, //只取5个document。
{$group:{_id:'$sex' , ageAvg: {$avg:'$age'} }} //将这5个人按照性别分组,ageAvg获得他们的平均属性。
])
aggregate中的可用操作符是比较多,比如$project:
- db.test.aggregate([
- {$group:{id:'$sex', ageArr: { $push : '$age'}}} ,
- {$project: {_id:'$name', sumAge: {
- $reduce:{
- input:'$ageArr',
- initialVal: 0,
- in: [ '$$value' ,' $$this'] //value指initialVal的值,this指遍历ageArr时的当前值。
- }
- }}}
- ])
其实功能是相同于$group:{_id:'$sex',ageArr:{$sum:'$age'}}的。不过这个例子的灵活性更高。
project可以理解为基于上一个collection,做一个映射的collection。
再介绍一个$redact:
可以根据field,甚至内嵌文档中的field,来过滤document.
- db.test.aggregate([
- {$math:{city:'shanghai'}},
- {$redact:{
- $cond:{
- if: {$gt:['$age', 15 ]}, //比较操作符:大于15返回ture;小于false;
- then:$$DESCEND, //true,那么继续下降,到内嵌文档,进行判断。
- else: $$PRUNE, //false,删除当前文档。
- }
- }
- }
- ])
redact还有一个Variable:$$keep意为保持现状,不删除,不下降。
age小于15的document将被删除,父document的age属性大于15,但因为配置了$$DESCEND,如果子document中age小于15,整个document都会被删除。
而如果父document中没有age属性,子document中即便age小于15,也不会被删除。
mapReduce
- db.test.mapReduce(
- map(), //2
- reduce(), //3
- {
- query: {age:{$gt:10}}, //1 step1标记是执行顺序。首先筛选age大于10的。
- out:'ouo_file', //5 step5 最后生成的collection导出在out_file这个colletion中。
- finalize:finalize() //4
- }
- );
- function map(){
- emit(this.name,this.age); //step2 可以随便发送。第一个值将作为主键,用于分组。第二个值,被push入各组的array中。
- }
- function reduce(key,values){ //step3 组已经被分好,这里处理这个array。并返回一个值。这样新的collection就快要诞生了。
- return values.reduce((pre,cur)=>{
- return pre*cur;
- })
- }
- function finalize(val){ //step4 为处理后的array值再做一次更改,此步可以省略。
- return 'result:' +val;
- }
序号是其执行顺序。mapReduce比aggregate灵活些。不过aggregate的方法都是内部封装,性能上要优于mapReduce。而一般情况,aggregate都能满足需求。
out的其他选项:
out:{ merge:'out_put'}; 与已存在的out_put进行合并。
out:{ reduce :'out_put'}; 将所得的value值与已存在的out_put内每个document 中value值相+ ( string+string ,number+number)。
Mongodb笔记(三)user && aggregate && mapReduce的更多相关文章
- mongodb笔记(三)
1.删除文档(remove()函数) 在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯. 语法: db.collection.remove( <q ...
- Hadoop阅读笔记(三)——深入MapReduce排序和单表连接
继上篇了解了使用MapReduce计算平均数以及去重后,我们再来一探MapReduce在排序以及单表关联上的处理方法.在MapReduce系列的第一篇就有说过,MapReduce不仅是一种分布式的计算 ...
- 响应式编程笔记三:一个简单的HTTP服务器
# 响应式编程笔记三:一个简单的HTTP服务器 本文我们将继续前面的学习,但将更多的注意力放在用例和编写实际能用的代码上面,而非基本的APIs学习. 我们会看到Reactive是一个有用的抽象 - 对 ...
- MongoDB笔记2018.2.6
MongoDB笔记2018.2.6 1.先简单接触下linux,大部分教程是在linux环境下的操作,要不然看不懂教程 2.找教程或视频 教程推荐菜鸟教程 学习MongDB前需要懂一定的Mysql语法 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- Mastering Web Application Development with AngularJS 读书笔记(三)
第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...
- Python 学习笔记三
笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...
- 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现
本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
随机推荐
- 查看python对象的属性
在Python语言中,有些库在使用时,在网络上找到的文档不全,这就需要查看相应的Python对象是否包含需要的函数或常量.下面介绍一下,如何查看Python对象中包含哪些属性,如成员函数.变量等,其中 ...
- 在容器最前面添加DOM元素 parent.insertBefore(new, parent.children[0])
//判断容器当前有没有子级元素,如果没有直接appendChild就行了; if (p.children[0]) { p.insertBefore(span, p.children[0]); } el ...
- Go语言版本的helloworld
新建一个project,然后建立一个main目录,在main目录下新建一个go类文件:main.go 内容如下: package main import "fmt" func ma ...
- Android系统移植与调试之------->如何添加一个adb wifi无线调试的功能【开发者选项】-【Wifi调试】
首先弄懂怎么设置adb wifi无线调试的功能,如下所示. 1. 手机端开启adb tcp连接端口 :/$setprop service.adb.tcp.port :/$stop adbd :/$st ...
- tornado.web.StaticFileHandler
tornado.web.StaticFileHandler 源代码中的解释 class StaticFileHandler(RequestHandler): """A s ...
- linux执行run文件显示cannot execute binary file
感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限.错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- 静默安装oracle 11g及参数配置优化详解
一.安装前准备工作1.修改主机名#vi /etc/hosts //并添加内网IP地址对应的hostname,如下127.0.0.1 localhost::1 ...
- CSS 之怀疑自己的审美 1 (Day49)
CSS概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离. 一.css的四种引入方式 1.行内式 行内式是在标 ...
- Nhibernate工具Profiler配置
1.使用之前需要确认Framework的Version,如果是4.0那么使用如下程序集需要在 创建ISessionFactory的项目中引用NHProfiler安装目录下的 HibernatingRh ...
- 转:asp.net获取url各项参数
假设当前页完整地址是:http://www.test.com/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.te ...