Mongo查询操作日志
示例语句:db.oplog.rs.find({"ns":"your_database_name.your_collection_name", "o2._id": ObjectId("your_ObjectId")}).sort({$natural:-1}).limit(1)
db.oplog.rs.find()
是MongoDB中一个系统集合(system collection),它记录了所有的MongoDB操作日志,可以用于实现数据库的备份和数据同步等功能。
该集合的每个文档代表一个操作,包括插入、更新、删除、复制等操作,并包含以下字段:
- ts:操作发生的时间戳
- h:主机ID(MongoDB集群环境下)
- v:版本号
- op:操作类型(insert/update/delete等)
- ns:命名空间(即集合名)
- o2:操作对象的ID
- o:操作的具体内容
通过查询db.oplog.rs
集合,我们可以获取所有的操作历史,以便进行数据备份和恢复等操作。常见的查询操作包括:
- 查询所有操作日志:
db.oplog.rs.find()
- 查询特定时间范围内的操作日志:
db.oplog.rs.find({"ts": {"$gte": startTime, "$lte": endTime}})
- 查询特定集合的操作日志:
db.oplog.rs.find({"ns": "database.collection"})
- 查询特定操作类型的操作日志:
db.oplog.rs.find({"op": "insert"})
需要注意的是,由于db.oplog.rs
集合中的数据非常庞大,因此查询时应该进行适当的过滤和分页,以避免查询性能的影响。同时,建议使用$natural
排序,以保证查询结果的正确性。
查询示例消息:
{
"ts" : Timestamp(1680166078, 3),
"t" : NumberLong(44),
"h" : NumberLong(0),
"v" : 2,
"op" : "u",
"ns" : "your_database_name.your_collection_name
",
"ui" : UUID("2116f2f4-b9c4-4c3d-be8e-c6f5a3d34f1a"),
"o2" : {
"_id" : ObjectId("your_ObjectId
")
},
"wall" : ISODate("2023-03-30T08:47:58.573Z"),
"o" : {
"$v" : 1,
"$set" : {
"status" : 5,
"updateTime" : "2023-03-30 16:47:58"
}
}
}
Mongo查询db下各个表大小
db.getCollectionNames().forEach(function(collectionName) {
var stats = db[collectionName].stats();
print("Collection: " + collectionName);
print("Approximate data size: " + (stats.size / (1024 * 1024)).toFixed(2) + " MB");
print("Approximate index size: " + (stats.totalIndexSize / (1024 * 1024)).toFixed(2) + " MB");
print("=============================");
});
mongodb 设置超时时间
在 MongoDB 中,可以通过设置 socketTimeoutMS
和 connectTimeoutMS
参数来设置超时时间。
socketTimeoutMS
指定了在没有接收到服务器响应时,客户端等待响应的最长时间。这个参数的默认值为 null
,表示不设置超时时间。如果你需要设置超时时间,可以将 socketTimeoutMS
参数设置为一个合适的时间,例如 5000 毫秒(5 秒):
db.adminCommand({setParameter: 1, socketTimeoutMS: 5000})
connectTimeoutMS
指定了连接 MongoDB 服务器的最长等待时间。如果连接服务器超过了这个时间,将会抛出一个异常。这个参数的默认值为 10000 毫秒(10 秒)。如果你需要设置连接超时时间,可以在 MongoDB URI 字符串中添加 connectTimeoutMS
参数,例如:
mongodb://localhost/test?connectTimeoutMS=5000