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数据库中可用。超级账号,超级权限