我怎么能在MongoDB中查询操作日志(Oplog)?

时间:2014-09-06 03:49:57

标签: mongodb pymongo mongodb-query mongo-shell

我想查询oplog以查找在特定时间内进行的操作。 如何在MongoDB中查找和查询oplog。放置oplog的地方?请举例说明......我无法通过互联网找到任何教程......

2 个答案:

答案 0 :(得分:0)

从oplog读取的简单查询

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

答案 1 :(得分:0)

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