MongoDB菜鸟入门(三):创建用户使用鉴权、使用聚合aggregate

来源:互联网 发布:钢结构cad软件sts下载 编辑:程序博客网 时间:2024/05/29 14:22

一、创建用户

  • 创建管理员账户
//以--auth启动数据库服务器mongod --dbpath=C:\data\shard\test --port 27000 --auth//以admin登录且切换到admin数据库mongo admin --port 27000//创建管理员db.createUser({user:"root",pwd:"12345",roles:["userAdminAnyDatabase"]})//登录db.auth("root","12345")
  • 创建用户账户

一般我们用于连接使用的就是用户账户,用户帐户对集合拥有读写删除的权限,但是没有删除数据库的权限。

//以管理员账户切换到需要创建用户的数据库use test//创建用户账户db.createUser({user:"testuser",pwd:"12345",roles:["readWrite"]})

read:读权限

write:写权限

readWrite:读写权限

十四、聚合aggregate

文档类型:

uid ip timestamp “23534643” “192.168.1.138” “1522334524”
  • 使用$group
//以uid分组,查询uid和统计条数以num为域显示,类似sql语句的select uid,count(*) as num from tb group by uid;db.loginHistory.aggregate([{$group:{_id:"$uid",num:{$sum:1}}}])//以uid分组,查询uid和统计timestamp最小值以num为域显示,类似sql语句的select uid,min(timestamp) as num from tb group by uid;db.loginHistory.aggregate([{$group:{_id:"$uid",num:{$min:"$timestamp"}}}])
表达式 作用描述 使用例子 $sum 计算总和。 db.loginHistory.aggregate([{$group : {_id : “\$uid”, num : {\$sum : “\$uid”}}}]) $avg 计算平均值 db.loginHistory.aggregate([{$group : {_id : “$uid”, num : {$avg : “$timestamp”}}}]) $min 获取集合中所有文档对应值得最小。 db.loginHistory.aggregate([{$group : {_id : “$uid”, num : {$min : “$timestamp”}}}]) $max 获取集合中所有文档对应值得最大值。 db.loginHistory.aggregate([{$group : {_id : “$uid”, num : {$max : “$timestamp”}}}]) $push 结果文档中插入值到一个数组中。 db.loginHistory.aggregate([{$group : {_id : “$uid”, url : {$push: “$url”}}}]) $addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.loginHistory.aggregate([{$group : {_id : “$uid”, url : {$addToSet : “$url”}}}]) $first 根据资源文档的排序获取第一个文档数据。 db.loginHistory.aggregate([{$group : {_id : “$uid”, first_url : {$first : “$url”}}}]) $last 根据资源文档的排序获取最后一个文档数据 db.loginHistory.aggregate([{$group : {_id : “$uid”, last_url : {$last : “$url”}}}])
  • 使用$project
//只显示域uid和timestamp,类似sql的select uid,timestamp from loginHistory;db.loginHistory.aggregate({$project:{uid:1,timestamp:1}})//不显示_id域db.loginHistory.aggregate({$project:{_id:0,uid:1,timestamp:1}})
  • 使用$match,类似于sql的having
//匹配timestamp大于等于1502097028352的文档,类似sql的select uid,min(timestamp) from loginHistory group by uid having timestamp >= 1502097028352;db.loginHistory.aggregate([{$match:{timestamp:{$gte:"1502097028352"}}},{$group:{_id:"$uid",min:{$min:"$timestamp"}}}])
  • 使用$skip跳过指定条数文档
//跳过1条文档类似sql的select uid,min(timestamp) from loginHistory group by uid having timestamp >= 1502097028352 limit 1;db.loginHistory.aggregate([{$match:{timestamp:{$gte:"1502097028352"}}},{$group:{_id:"$uid",min:{$min:"$timestamp"}}},{$skip:1}])
原创粉丝点击