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,数据库)