db.currentOp().inprog的结果很奇怪



我运行命令db.currentOp().inprog,结果令我困惑。

为什么ns"", query是空对象

    mongos> db.currentOp().inprog[100]
    {
    "opid" : "shard0017:5772491",
    "active" : false,
    "op" : "query",
    "ns" : "",
    "query" : {
    },
    "client_s" : "10.161.0.93:41833",
    "desc" : "conn592",
    "threadId" : "0x7f81d63b9700",
    "connectionId" : 592,
    "waitingForLock" : false,
    "numYields" : 0,
    "lockStats" : {
            "timeLockedMicros" : {
            },
            "timeAcquiringMicros" : {
            }
    }

}

我认为第一种方法是理解方法currentOp()的目的。它由Mongo定义,"返回一个文档,其中包含数据库实例正在进行的操作的信息。"从这里你可以传入一个名为"operations"的可选参数。下面对输入参数定义进行分类。

指定要报告的操作。可以传递一个布尔值或文档。指定true包括对空闲连接和系统操作的操作。指定带有查询条件的文档,只报告符合条件的操作。

现在,给定了定义,您可以指定参数来针对正在进行的所需操作。其中,您已经指出ns和query都为空。之所以这样表示,是因为您没有指定希望查看其操作的名称空间(ns)或文档(查询)。实际上,将显示的是您希望看到当前操作的值。

例如,对于db.collection.find()操作,查询包含查询谓词。

这是一个名称空间参数被传递到currentOp()方法的例子。

db.currentOp(
   {
     "active" : true,
     "secs_running" : { "$gt" : 3 },
     "ns" : /^db1./
   }
)

这是一个文档查询,也包括一个"waitingForLock"条件。

db.currentOp(
   {
     "waitingForLock" : true,
     $or: [
        { "op" : { "$in" : [ "insert", "update", "remove" ] } },
        { "query.findandmodify": { $exists: true } }
    ]
   }
)

更多信息请访问http://docs.mongodb.org/manual/reference/method/db.currentOp

希望这对你有帮助!

最新更新