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(), //2reduce(), //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)。
转载于:https://www.cnblogs.com/ztwBlog/p/6282367.html
Mongodb笔记(三)user aggregate mapReduce相关推荐
- mongodb笔记(三)
1.删除文档(remove()函数) 在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯. 语法: db.collection.remove(<qu ...
- Mongodb使用学习笔记(三)
文章目录 Mongodb使用学习笔记(三) 1. MongoDB 更新文档 1.1 update() 1.2 save() Mongodb使用学习笔记(三) 1. MongoDB 更新文档 参考:Mo ...
- mongo学习笔记四:Mongodb的三种集群(Replica Set)
Replica Set 中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据 ...
- MongoDB聚合查询 Pipeline 和 MapReduce
MongoDB聚合查询 MongoDB聚合查询 什么是聚合查询 Pipeline聚合管道方法 聚合流程 详细流程 聚合语法 常用聚合管道 $count $group $match $unwind $p ...
- SpringBoot整合Mongodb(三) 使用MongoTemplate进行连表查询
SpringBoot整合Mongodb(三) 使用MongoTemplate进行连表查询 由于在实际开发项目中,突然涉及到了需要Mongodb 进行连表操作的业务,所以我在私下进行了一波学习. 服务器 ...
- Hadoop读书笔记(六)MapReduce自定义数据类型demo
Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的sh ...
- Hadoop读书笔记(八)MapReduce 打成jar包demo
Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的sh ...
- MongoDB笔记记录(雷哥课堂)–基本命令
MongoDB笔记记录(雷哥课堂)–基本命令 3 常用命令 3.1 数据库操作 3.1.1 选择和创建数据库 use 数据库名称 如果数据库不存在就自动创建,如果存在则选择该数据库 以下数据库名是保留 ...
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- tensorflow学习笔记(三十二):conv2d_transpose (解卷积)
tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...
最新文章
- PMCAFF | 赶集、暴风影音这些优质App为什么都在做积分商城?
- 数据库:学好SQL必须知道的10个高级概念
- c语言输入字符串smallbig,为什么输出不了small,这里big和small都是一样的操
- 软件度量五步法包括_软件交付效能度量——从吞吐量和稳定性开始
- 虚拟机ping不通宿主机,宿主机能ping通虚拟机
- TP-link路由器设置界面展示
- Java程序---学生管理系统的登录和注册
- SEGGER Embedded Studio 搭建开发环境
- Android6.0源码下载
- oracle 11 ora 12514,客户端连接oracle11出现提示ORA-12514:错误解决方法
- 单耳蓝牙耳机怎么连接_蓝牙耳机怎么连接
- Python Django 添加首页尾页上一页下一页代码实例
- iOS 单元测试和UI测试教程
- java frame 显示图片_java怎么在JFrame中显示动态图片?
- 光滑性准则(Smoothness Rule) 递推方程(Recursive Equation)
- ffmpeg读取rtsp并保存到mp4文件
- 如何用Jmeter发送消息到Solace JNDI
- 大数据技术与原理 概述
- 【往届已检索】第二届电子、信息与计算技术前沿国际会议征稿中
- 抓取高德POI数据,并使用MySQL建立本地空间数据库(一)