示例语句: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"
}
}
}