版本: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. MATLAB_7-彩色图像【长长的笔记!】车牌放在文章末尾有链接
  2. 汪潮涌:AI创业落地为王,技术和算法难以成为核心壁垒
  3. Gartner发布2021年重要战略科技趋势
  4. Java多线程与并发控制
  5. C++语言基础 —— STL —— 容器与迭代器 —— map 与 multimap
  6. 使用Castle做类的增强
  7. 《一》Java EE
  8. python version 3_VIM设置python3支持和检测python version
  9. win7打印服务经常无缘无故自动停止print spooler服务停止
  10. 全球餐厅库存管理软件行业调研及趋势分析报告
  11. 【平衡小车制作】(二)电机驱动(超详解)
  12. Cloudflare DDNS梅林插件代码
  13. js 文件下载请求两种方式
  14. 编码:隐匿在计算机软硬件背后的语言(1)--编码到二进制数字系统
  15. python使用ffmpeg批量将flv转mp4
  16. python 成语接龙-连接数据库
  17. 电脑出现白屏怎么办(软件有的能打开,就是一开机就出现白屏)(亲测有效)
  18. 概率DP——BZOJ4008 [HNOI2015]亚瑟王
  19. thinkpad笔记本 刷bios失败,被救回方法
  20. MySQL 汉字提取首字母、姓名首字母全拼、姓名转拼音

热门文章

  1. html5 乱码解决方案
  2. 06-08 Jenkins 自动化测试持续集成
  3. 金融数据分析与挖掘实战1.5.2-1.5.3
  4. 做web前端的小伙伴注意了,未来这些发展方向可以试试!
  5. 最详细,快速入门Web前端开发的正确姿势
  6. Web前端基础知识整理
  7. python中pcolor_python中pcolormesh-女性时尚流行美容健康娱乐mv-ida网
  8. python爬虫获取标签规则_Python爬虫之数据提取-selenium定位获取标签对象并提取数据...
  9. linux集群组建和管理,Redis集群搭建与管理
  10. python计算auc的代码_python是怎么计算auc指标的?