版本: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的更多相关文章

  1. mongodb笔记(三)

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

  2. Hadoop阅读笔记(三)——深入MapReduce排序和单表连接

    继上篇了解了使用MapReduce计算平均数以及去重后,我们再来一探MapReduce在排序以及单表关联上的处理方法.在MapReduce系列的第一篇就有说过,MapReduce不仅是一种分布式的计算 ...

  3. 响应式编程笔记三:一个简单的HTTP服务器

    # 响应式编程笔记三:一个简单的HTTP服务器 本文我们将继续前面的学习,但将更多的注意力放在用例和编写实际能用的代码上面,而非基本的APIs学习. 我们会看到Reactive是一个有用的抽象 - 对 ...

  4. MongoDB笔记2018.2.6

    MongoDB笔记2018.2.6 1.先简单接触下linux,大部分教程是在linux环境下的操作,要不然看不懂教程 2.找教程或视频 教程推荐菜鸟教程 学习MongDB前需要懂一定的Mysql语法 ...

  5. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  6. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  7. Mastering Web Application Development with AngularJS 读书笔记(三)

    第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...

  8. Python 学习笔记三

    笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...

  9. 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现

    本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...

  10. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

随机推荐

  1. 第二课——解析mysqldump命令和mysqlbinlog命令+innodb和Myisam存储引擎简介

    环境说明 mysql版本:Percona-Server-5.6.30 IP:10.7.15.167 端口:3306 安装目录:/httx/run/mysql 数据目录:/httx/run/mysql/ ...

  2. thinkphp5, 隐藏index.php

    tp5官网手册里的代码有误, 注意防坑, 正确的应该是: 修改.htaccess文件: <IfModule mod_rewrite.c> Options +FollowSymlinks R ...

  3. Linux上添加服务(htttpd,samba等等)

    service httpd restart   出现 httpd:unrecognized service 错误 vi /etc/rc.d/rc.local #在/etc/rc.d/rc.local中 ...

  4. quartz集群 定时任务 改成可配置

    前面的博文中提到的quartz集群方式会有以下缺点: 1.假设配置了3个定时任务,job1,job2,job3,这时数据库里会有3条job相关的记录,如果下次上线要停掉一个定时任务job1,那即使定时 ...

  5. make Makefile 与 cmake CMakeLists.txt

    make Makefile 与 cmake CMakeLists.txt 大家都知道,写程序大体步骤为: 1.用编辑器编写源代码,如.c文件. 2.用编译器编译代码生成目标文件,如.o. 3.用链接器 ...

  6. php socket 处理只是来数据流,该怎样避免(好像是堵塞了)

    php socket 处理只是来数据流,该怎样处理(好像是堵塞了) 需求:php接受一个硬件往8888port上发送数据,假设收到后,应socket_send函数返回"\xFA\x01\x0 ...

  7. K NEAREST NEIGHBOR 算法(knn)

    K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...

  8. 词性标注算法之CLAWS算法和VOLSUNGA算法

    背景知识 词性标注:将句子中兼类词的词性根据上下文唯一地确定下来. 一.基于规则的词性标注方法 1.原理 利用事先制定好的规则对具有多个词性的词进行消歧,最后保留一个正确的词性. 2.步骤 ①对词性歧 ...

  9. python16_day14【jQuery】

    一.作用域 1.作用域例一 <script> var str = "global"; //AO1 AO1.str function t(age){ console.lo ...

  10. [WebException: The underlying connection was closed: The message length limit was exceeded.]解决方法

    [WebException: The underlying connection was closed: The message length limit was exceeded.]   Syste ...