如何在MongoDB中查询操作日志(Oplog)?

如何在MongoDB中查询操作日志(Oplog)?,mongodb,pymongo,mongodb-query,mongo-shell,Mongodb,Pymongo,Mongodb Query,Mongo Shell,我想查询oplog以查找在特定时间执行的操作。 如何在MongoDB中查找和查询oplog。oplog放在哪里?请举例说明…我在互联网上找不到任何教程…从oplog读取的简单查询 query = {'ts': {'$gt': some_timestamp}} # Replace with your own query. cursor = db.oplog.rs.find(query, **_TAIL_OPTS) 如果希望按日期查询,则需要生成适当的MongoDB时间戳。为此

我想查询oplog以查找在特定时间执行的操作。
如何在MongoDB中查找和查询oplog。oplog放在哪里?请举例说明…我在互联网上找不到任何教程…

从oplog读取的简单查询

 query = {'ts': {'$gt': some_timestamp}}  # Replace with your own query.
        cursor = db.oplog.rs.find(query, **_TAIL_OPTS)

如果希望按日期查询,则需要生成适当的MongoDB时间戳。为此,您可以使用
Date

例如,如果要计算两个日期之间的条目数量,可以尝试类似以下查询:

db.oplog.rs.count(
    {
        ts: 
        {
            $gt: Timestamp(new Date("2020-02-01").getTime() / 1000, 1), 
            $lt: Timestamp(new Date("2020-03-01").getTime() / 1000, 1)
        }
    }
);
您必须始终将
日期
毫秒除以
1000
,因为
时间戳
类在
1970-01-01
之后以秒为单位运行

下面是另一个示例查询,它排除了
oplog
中的一些非常常见的条目,例如
“定期noop”


它只是一个集合,并且仅与副本集一起出现。手册是您阅读的最佳场所:
db.oplog.rs.find(
    {
        ts: 
        {
            $gt: Timestamp(new Date("2020-02-01").getTime() / 1000, 1), 
            $lt: Timestamp(new Date("2020-03-01").getTime() / 1000, 1)
        },
        "o.msg":
        {
            $ne: "periodic noop"
        },
        "ns" : {
            $ne: "config.system.sessions"
        }
    }
).limit(5).pretty();