版本: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相关推荐

  1. mongodb笔记(三)

    1.删除文档(remove()函数) 在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯. 语法: db.collection.remove(<qu ...

  2. Mongodb使用学习笔记(三)

    文章目录 Mongodb使用学习笔记(三) 1. MongoDB 更新文档 1.1 update() 1.2 save() Mongodb使用学习笔记(三) 1. MongoDB 更新文档 参考:Mo ...

  3. mongo学习笔记四:Mongodb的三种集群(Replica Set)

    Replica Set    中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据 ...

  4. MongoDB聚合查询 Pipeline 和 MapReduce

    MongoDB聚合查询 MongoDB聚合查询 什么是聚合查询 Pipeline聚合管道方法 聚合流程 详细流程 聚合语法 常用聚合管道 $count $group $match $unwind $p ...

  5. SpringBoot整合Mongodb(三) 使用MongoTemplate进行连表查询

    SpringBoot整合Mongodb(三) 使用MongoTemplate进行连表查询 由于在实际开发项目中,突然涉及到了需要Mongodb 进行连表操作的业务,所以我在私下进行了一波学习. 服务器 ...

  6. Hadoop读书笔记(六)MapReduce自定义数据类型demo

    Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的sh ...

  7. Hadoop读书笔记(八)MapReduce 打成jar包demo

    Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的sh ...

  8. MongoDB笔记记录(雷哥课堂)–基本命令

    MongoDB笔记记录(雷哥课堂)–基本命令 3 常用命令 3.1 数据库操作 3.1.1 选择和创建数据库 use 数据库名称 如果数据库不存在就自动创建,如果存在则选择该数据库 以下数据库名是保留 ...

  9. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  10. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

最新文章

  1. PMCAFF | 赶集、暴风影音这些优质App为什么都在做积分商城?
  2. 数据库:学好SQL必须知道的10个高级概念
  3. c语言输入字符串smallbig,为什么输出不了small,这里big和small都是一样的操
  4. 软件度量五步法包括_软件交付效能度量——从吞吐量和稳定性开始
  5. 虚拟机ping不通宿主机,宿主机能ping通虚拟机
  6. TP-link路由器设置界面展示
  7. Java程序---学生管理系统的登录和注册
  8. SEGGER Embedded Studio 搭建开发环境
  9. Android6.0源码下载
  10. oracle 11 ora 12514,客户端连接oracle11出现提示ORA-12514:错误解决方法
  11. 单耳蓝牙耳机怎么连接_蓝牙耳机怎么连接
  12. Python Django 添加首页尾页上一页下一页代码实例
  13. iOS 单元测试和UI测试教程
  14. java frame 显示图片_java怎么在JFrame中显示动态图片?
  15. 光滑性准则(Smoothness Rule) 递推方程(Recursive Equation)
  16. ffmpeg读取rtsp并保存到mp4文件
  17. 如何用Jmeter发送消息到Solace JNDI
  18. 大数据技术与原理 概述
  19. 【往届已检索】第二届电子、信息与计算技术前沿国际会议征稿中
  20. 抓取高德POI数据,并使用MySQL建立本地空间数据库(一)

热门文章

  1. “见识”很重要 记一起Oracle的SQL调整
  2. 【python】if判断、for循环、while循环练习题
  3. 【线程】——volatile关键字
  4. settings.xml的配置
  5. web测试与app功能测试的区别
  6. Android6.0以上打电话动态权限
  7. html网页布局对联,html javascript 网站两侧对联广告
  8. 线性回归(一)---一元线性回归
  9. 新人学习web前端必须要知道的基础知识,让你轻松入门
  10. 做前端的你有没有觉得很吃力?