2015-08-31 74 views
0

我运行命令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" : { 

      } 
    } 

}

回答

1

我认为第一种方法是了解方法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

希望这有助于!