2015-08-31 137 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

希望這有助於!