1. 聚合查询

coll.aggregate(
[
{ $match: { msgType: ‘text’ } },
{ $group: { _id: ‘$content’, count: { $sum: 1 } } },
{ $match: { count: { $gt: 1 } } },
{ $sort: { count: -1 } }
]
).toArray(function(err, result) {
console.log(result);
});

[ { _id: ‘猜谜底’, count: 7 },
{ _id: ‘test’, count: 5 },
{ _id: ‘help1’, count: 4 },
{ _id: ‘百科help1’, count: 3 } ]

2.慢查询

db.currentOp(
{
“active” : true,
“secs_running” : { “$gt” : 3 },
“ns” : /^xxx./ // 具体集合
}
)
清除进程
db.killOp(opid)

3.索引命中分析

3.1 索引分类

  • _id索引
  • 复合索引
  • 过期索引
  • 全文索引
  • 地理空间索引

    3.2 索引分析

    queryPlanner 默认
    executionStats
    allPlansExecution

db.test.explain(“executionStats”).find({“user”:”user200000”})
索引不能被以下的查询使用:
正则表达式及非操作符,如 $nin, $not,$ne 等。
算术运算符,如 $mod, 等。
$where 子句, $exists

stage 描述
COLLSCAN 全表扫描
IXSCAN 扫描索引
FETCH 根据索引去检索指定document
SHARD_MERGE 将各个分片返回数据进行merge
SORT 表明在内存中进行了排序
LIMIT 使用limit限制返回数
SKIP 使用skip进行跳过
IDHACK 针对_id进行查询
SHARDING_FILTER 通过mongos对分片数据进行查询
COUNT 利用db.coll.explain().count()之类进行count运算
COUNTSCAN count不使用Index进行count时的stage返回
COUNT_SCAN count使用了Index进行count时的stage返回
SUBPLA 未使用到索引的$or查询的stage返回
TEXT 使用全文索引进行查询时候的stage返回
PROJECTION 限定返回字段时候stage的返回

3.3查看索引创建进度

db.currentOp(
{
$or: [
{
op: “command”,
“query.createIndexes”: {
$exists: true
}
},
{
op: “insert”,
ns: /.system.indexes\b/
}
]
}
)

4.MongoDB数据库角色

内建的角色
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:system
角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
创建用户,开启验证

  1. // 创建用户
  2. >use admin
  3. > db.createUser(
  4. {
  5. user: "adminUser",
  6. pwd: admin123”,
  7. roles: [{role: userAdminAnyDatabase”,db:”admin”}]
  8. }
  9. )
  10. // 开启验证
  11. > mongod --auth --dbpath /home/user1/mongodb/data --logpath /home/user1/mongodb/log/logs --fork

参考文档:
https://zhuanlan.zhihu.com/p/30377426
https://www.jianshu.com/p/c58d653879f2