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

一、创建用户

  • 创建管理员账户
//以--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

文档类型:

uidiptimestamp
“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}])
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值