我运行命令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
希望这对你有帮助!