【问题标题】:How could i query operation log(Oplog) in MongoDB?如何在 MongoDB 中查询操作日志(Oplog)?
【发布时间】:2014-09-06 03:49:57
【问题描述】:

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

【问题讨论】:

标签: mongodb pymongo mongodb-query mongo-shell


【解决方案1】:

如果要按日期查询,则需要生成合适的 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)
        }
    }
);

您必须始终将Date 毫秒除以1000,因为Timestamp 类在1970-01-01 之后运行秒。

这是另一个示例查询,它排除了oplog 中的一些非常常见的条目,例如"periodic 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();

【讨论】:

    【解决方案2】:

    从 oplog 读取的简单查询

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

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多