我是MongoDB的新手,正在尝试跟踪数据库的操作。根据文档,似乎像insert这样的操作应该在oplog和profiler中,但我只看到它记录在profiler中。对于上下文,我在测试集合中的本地数据库中插入(例如'local.col'),但过滤'local.col'只会在profiler输出中产生结果,而不是oplog。
基于此,我试图理解这两个工具之间的差异,因为当oplog没有记录操作时,我无法在互联网上找到任何内容。
答案 0 :(得分:0)
让我们插入一些东西..
db.getSiblingDB("local").oplog.rs.find().sort({ts:-1})
然后看看我们在oplog上的内容......
db.getSiblingDB("local").oplog.rs.find({"ns":"test.testi"})
{ "ts" : Timestamp(1516437458, 2), "t" : NumberLong(80), "h" : NumberLong("8404799607288492717"), "v" : 2, "op" : "i", "ns" : "test.testi", "o" : { "_id" : ObjectId("5a62ffd1c0d303fa808617bf") } }
你可以看到我们有插入操作(op)" i" with namespace(ns)" test.testi"和文档(o)只有对象id自动添加到空文档的系统。
因此,oplog仅记录更改。我们在这里可以看到......
db.getSiblingDB("test").testi.update({"_id" : ObjectId("5a62ffd1c0d303fa808617bf") },{$set:{"other":"second"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
{ "ts" : Timestamp(1516437961, 1), "t" : NumberLong(80), "h" : NumberLong("-6648566515650969093"), "v" : 2, "op" : "u", "ns" : "test.testi", "o2" : { "_id" : ObjectId("5a62ffd1c0d303fa808617bf") }, "o" : { "$set" : { "other" : "second" } } }