mongodb日常操作

mongodb日常操作

1、查看版本

db.version()

2、创建索引

db.tptab1.createIndex( { "insertTime": 1 }
db.tptab2.createIndex( { "createTime": 1 }, { expireAfterSeconds: 3600 } )  --设置过期时间,超过1小时的数据自动删除
db.col.createIndex({"title":1}, {'background':true})    --后台创建索引,没有锁
db.tptab2.getIndexes()  --查看该表的所有索引
db.col.reIndex({"title":-1})  --在title字段上重建倒序索引
db.tptab2.dropIndex("snCode_1")   --删除索引
db.tptab1.totalIndexSize()   --查看集合索引大小

3、重命名集合

db.adminCommand({renameCollection:'testdb.tptab1', to:'testdb.tptab2'});   --数据库必须要写,将tptab1改成tptab2

4、按时间查询

db.getCollection('tab1').find( { "insertTime" :{"$gte":ISODate('2021-12-19T02:00:00Z'),"$lt":ISODate('2021-12-20T20:00:00Z')}}).count()  
db.getCollection('tab1').find().count()
db.getCollection('tab1').find( { "insertTime" :null}).count()  1536
db.tab1.aggregate({"$group":{_id: '1',max_value:{"$max":"$createTime"}}});  --查最大时间
db.tab1.aggregate({"$group":{_id: '1',min_value:{"$min":"$createTime"}}});  --查最小时间

5、复制一个表

db.tab1.find( { "createTime" :{"$gte":ISODate('2022-07-03T00:00:00Z')}}).forEach(function(x){db.tab2.insert(x);})

6、批量查询

db.tab1.find({snCode:{$in:["KLM0120 01020 EVA2-FRT A","LAM0220 01181 EVA2-FRT A"]},operationTypeCode:{$in:["952201","2801103"]}})

7、不等于

db.tab1.find({"battery_cell_code":{"$ne":[{"$strLenCP":"$battery_cell_code"},25]}})
db.tab1.find({"battery_cell_code":{"$exists":true},"$expr":{"$ne":[{"$strLenCP":"$battery_cell_code"},25]}})    --在这个字段不为空的情况下

8、按条件统计

db.tab1.aggregate([  {
    $match : { "TypeCode": '905104'}
  },
    {$group :{_id : "$snCode", num_code : {$sum : 1}}
    }])
    相当于
select snCode,count(*) from tab1where TypeCode='905104' group by snCode

9、删除重复数据

db.tab1.aggregate([
 
    {
 
        $group: { _id: {snCode:'$snCode',
                workpieceCode:'$workpieceCode', 
                workpieceType:'$workpieceType', 
                workstationCode:'$workstationCode'
, procedureCode:'$procedureCode'
, procedureName:'$procedureName'
, trayNo:'$trayNo'
, operationTypeCode:'$operationTypeCode'
, position:'$position'
, detecValue:'$detecValue'
, worksectionCode:'$worksectionCode'
, flag:'$flag'
, _class:'$_class'
, operationTypeName:'$operationTypeName'
, operationTypeDesc:'$operationTypeDesc'
, paramterType:'$paramterType'
, detecResult:'$detecResult'
, judgeType:'$judgeType'
, upperLimit:'$upperLimit'
, setStandardValue:'$setStandardValue'
, lowerLimit:'$lowerLimit'
, unitCode:'$unitCode'
},count: {$sum: 1},dups: {$addToSet: '$_id'}}
 
    },
 
    {
 
        $match: {count: {$gt: 1}}
 
    }
 
]).forEach(function(doc){
 
    doc.dups.shift();
 
    db.tab1.remove({_id: {$in: doc.dups}});
 
});

10、查看是否开启慢查询

查看是否开启 Profiling 功能
db.getProfilingStatus();
db.getProfilingLevel()   --查看开启的级别
 0 – 不开启
 1 – 记录慢命令 (默认为>100ms)
 2 – 记录所有命令
> db.setProfilingLevel(1)
{ "was" : 0, "slowms" : 100, "sampleRate" : 1, "ok" : 1 }   --默认100ms 
设置慢查询的时间
db.setProfilingLevel( level , slowms ) 
db.setProfilingLevel( 1 , 10 );
db.system.profile.find().sort({$natural:-1})    --查询慢
db.currentOp(true);  --查询当前的查询

11、开启权限认证

找到MongoDB安装目录下的bin目录中的mongod.cfg文件,开启权限验证功能

security: 
    authorization: enabled    //冒号后面必须有一个空格,authorization前面是4个空格
storage:
    dbPath: /opt/mongodb/data
systemLog:
    destination: file
    logAppend: true
    path: /opt/mongodb/log/mongodb.log
net:
    bindIp: 0.0.0.0
    port: 27017
processManagement:
    fork: true

重启MongoDB服务
使用mongo连接数据库,并登录超级管理员账号
在没有认证之前,也可以使用mongo连接数据库,只不过不能执行其他指令。

12、设置账号

管理员账号

use admin

db.createUser({
  user: 'admin',    // 用户名(自定义)
  pwd: 'Abc1231234++',  // 密码(自定义)
  roles:[{
    role: 'root',   // 使用超级用户角色
    db: 'admin'     // 指定数据库
  }]
})

普通账号

use testdb

db.createUser({
  user: 'testdb',    // 用户名(自定义)
  pwd: 'Abc1231234++ff',  // 密码(自定义)
  roles:[{
    role: 'readWrite',   // 指定角色
    db: 'testdb'     // 指定数据库
  }]
})

内建角色
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值