MongoDB 使用技巧记录(十一)
一:删除及查找指定日志记录
查找记录
db.InfoLog.find({CreateDateTime:{$gte:"2016-08-07 00:00:00"}});
删除单条记录:
db.system.users.remove({_id:'admin.root'});
删除记录
db.InfoLog.remove({CreateDateTime:{$lt:"2016-08-01 00:00:00"}});
WriteResult({ "nRemoved" : 14257935 })
shell 处理
#!/bin/bash
DelDay=7
CurDay="`date +\"%Y-%m-%d %H:%M:%S\"`"
DateAgos=`date -d "${DelDay} day ago" +"%Y-%m-%d %H:%M:%S"`
echo $DateAgos
#del HospitalServiceLogging of 7 days ago
echo -e "use HospitalServiceLogging\n db.InfoLog.remove({CreateDateTime:{\$lt:\"${DateAgos}\"}});"|mongo --host 10.0.0.60 --port 27017
db.ErrorLog.remove({CreateDateTime:{$lt:"2016-08-01 00:00:00"}});
db.InfoLog.remove({CreateDateTime:{$lt:"2016-08-01 00:00:00"}});
db.WarningLog.remove({CreateDateTime:{$lt:"2016-08-01 00:00:00"}});
db.UserErrorLog.remove({CreateDateTime:{$lt:"2016-08-01 00:00:00"}});
mongodb 中批量删除特定字段里指定日期的记录
> use HospitalServiceLogging
switched to db HospitalServiceLogging
> show collections;
ErrorLog
InfoLog
WarningLog
system.indexes
> db.InfoLog.remove({ CreateDateTime : { $lt : "2016-08-02 00:00:00" } } );
WriteResult({ "nRemoved" : 30012 })
>
如:db.InfoLog.remove({ CreateDateTime : { $lt : "2016-08-02 00:00:00" } } );
删除 InfoLog 中 CreateDateTime 字段值 小于 8月2号的记录
CreateDateTime 字段值
$lt 小于
内网删除指定时间记录值
db.InfoLog.remove({CreateDateTime:{$lt:"2016-08-15 00:00:00"}});
db.WarningLog.remove({CreateDateTime:{$lt:"2016-08-16 00:00:00"}});
db.ErrorLog.remove({CreateDateTime:{$lt:"2016-08-16 00:00:00"}});
二:使用技巧
Q6: 最大连接数
version: '3.8'
services:
mongodb:
#image: mongodb/mongodb-community-server:6.0.6-ubuntu2204
image: mongo:4.4.0
container_name: mongodb
hostname: mongodb
privileged: true
ulimits:
nofile:
soft: 3000
hard: 3000
environment:
TZ: Asia/Shanghai
MONGODB_INITDB_ROOT_USERNAME: root
MONGODB_INITDB_ROOT_PASSWORD: Aa123456
restart: always
volumes:
- /data/mongo/configdb:/data/configdb
# - /data/mongo/mongod.conf:/data/conf/mongod.conf
- /data/mongo/db:/data/db
- /data/mongo/backup:/data/backup
- /data/mongo/logs:/data/logs
- /etc/localtime:/etc/localtime:ro
ports:
- "27017:27017"
networks:
- meta
# command: --config /data/conf/mongod.conf
networks:
meta:
external: true
docker 部署时候启动的增加limit默认参数,mongo最大连接数
ulimits:
nofile:
soft: 3000
hard: 3000
nerdctl inspect 423cf4a0471e
查看:
db.serverStatus().connections.available
db.serverStatus().connections;
db.currentOp(true).inprog.filter(op => op.client).length
系统配置最大值
/etc/profile
#core
ulimit -n 65535
Q5:mongostat 查看性能
docker exec 98318ac0c9c0 mongostat -h mongo-rs/192.168.102.51:27017,192.168.102.52:27017,192.168.102.53:27017 -u=root -p=Aa123456 --authenticationDatabase=admin
Q4:查看当前操作
db.currentOp是个好东西,顾名思义,就是当前的操作。在mongodb中可以查看当前数据库上此刻的操作语句信息,包括insert/query/update/remove/getmore/command等多种操作
#下面的示例返回对于数据库db1运行时间大于3秒的所有活动操作:
db.currentOp(
{
"active" : true,
"secs_running" : { "$gt" : 3 },
"ns" : /^db1./
}
)
Q3: 查看collections结构
db.user_info.find().limit(1)
Q2:查看操作日志记录
db.oplog.rs.find({"ns":"user.user_info"}).limit(1)
Q1:是否使用索引
db.表名.find(条件).explain() 查看分析结果
db.collection.getIndexes() // 查看集合索引
db.collection.createIndex() // 创建集合索引
db.collection.dropIndex() // 删除集合索引
查看索引
db.user_info.getIndexes()
查询一条记录或查看collection格式
db.user_info.find().limit(1)
分析是否使用解析
db.user_info.find({"user_id":"1691708133484793856"}).explain()
表示索引执行成功 indexBounds
#################
1.批量添加字段
> db.meng.find();
{ "_id" : ObjectId("585b93023d7b30d0969dde31"), "name" : "meng" }
{ "_id" : ObjectId("585b930d3d7b30d0969dde32"), "id" : 2 }
> db.meng.update({},{$set:{age:"20"}},{multi:1});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.meng.find();
{ "_id" : ObjectId("585b93023d7b30d0969dde31"), "name" : "meng", "age" : "20" }
{ "_id" : ObjectId("585b930d3d7b30d0969dde32"), "id" : 2, "age" : "20" }
>
2.时间转换
c:\Servers\Mongo\bin>mongoexport.exe --csv -f "CreatedTime" -c User -d ce -h localhost
connected to: localhost
CreatedTime
2011-10-28T01:12:40Z
3.Mongodb 程序连接方法
uri = "mongodb://root:hk_2016Aug15@120.25.134.127:27017/admin?authMechanism=SCRAM-SHA-1"
4.如何查看mongodb中的记录值格式
db.UserErrorLog.findOne();
查看记录值显示基本的字段定义;
5.如何根据日志时间排序
如时间字段 ExceptionDate
逆序
db.UserErrorLog.find().sort({"ExceptionDate":-1});
升序
db.UserErrorLog.find().sort({"ExceptionDate":1});
6.显示限定记录数
只列出1条记录
db.UserErrorLog.find().sort({"ExceptionDate":-1}).limit(1);