Mongodb

如何使用 API 執行 Mongo 數據庫 db.currentOp(true) 命令

  • December 18, 2019

使用 Mongo Java API,我可以像這樣執行 currentOp() 命令:

MongoClient mongoClient = null;
mongoClient = new MongoClient( "127.0.0.1", 27017);
db = mongoClient.getDB("admin");
db.command("currentOp");

但我只得到目前操作的詳細資訊。我也需要獲取空閒連接的詳細資訊。

參考此

https://docs.mongodb.com/v3.0/reference/method/db.currentOp/#currentop-examples

行為

如果將 true 傳遞給 db.currentOp(),則該方法會返回有關所有操作的資訊,包括對空閒連接的操作和系統操作。

db.currentOp(true) 傳入true相當於傳入一個查詢文件{ ‘$all’: true }。

如果將查詢文件傳遞給 db.currentOp(),則輸出僅返回與查詢匹配的目前操作的資訊。您可以查詢輸出欄位。請參閱範例。

您還可以指定 { ’ $ all’: true } query document to return information on all in-progress operations, including operations on idle connections and system operations. If the query document includes ’ $ all’: true 以及其他查詢條件,只有 ‘$all’: true 適用。

使用此命令db.command("currentOp(true)");時,我收到如下異常:

“ok”:0.0,“errmsg”:“沒有這樣的命令:‘currentOp(true)’,錯誤的 cmd:’{ currentOp(true):true }’”,“code”:59}

試試這個:

db.command("currentOp({$all: true})");

我已經測試了這個的 JS 版本(沒有設置 Java 來測試 atm)並且它有效。如果您正在尋找如何執行此操作的範例,您可以在此範例中查看 Java 中的實際方法(而不是幫助程序),將第43 行的預設值與第 49行的“全部”進行比較

我要求我們的MongoDB 團隊快速瀏覽一下,因為現在是星期五,快到假期了。這是他們的建議,希望對您有所幫助:

public static void main(String[] args) {
       MongoClient mongoClient = new MongoClient("192.168.88.11");
       MongoDatabase database = mongoClient.getDatabase("admin");
       Document currentOpResults = database.runCommand(new Document("currentOp", 1)).append("$all", true);
       System.out.println(currentOpResults.toJson());

   }

給出輸出:

{ "inprog" : [{ "desc" : "conn1055", "threadId" : "139685894772480", 
"connectionId" : 1055, "client" : "192.168.88.102:57119", "active" : true,  
"opid" : 7664, "secs_running" : 0, "microsecs_running" : { "$numberLong" : 
"31" }, "op" : "command", "ns" : "admin.$cmd", "query" : { "currentOp" : 1 
}, "numYields" : 0, "locks" : { }, "waitingForLock" : false, "lockStats" : { 
} }], "ok" : 1.0, "$all" : true }

程式碼片段:

/*
* using latest driver available at 
https://oss.sonatype.org/content/repositories/releases/org/mongodb/mongo-java-driver/3.6.0/
* mongodb 3.4.1
*/

package javaapplication1;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class JavaApplication1 {

   public static void main(String[] args) {
       MongoClient mongoClient = new MongoClient(“servername.domain.com”);
       MongoDatabase database = mongoClient.getDatabase(“admin”);
       Document currentOpResults = database.runCommand(new Document(“currentOp”, 1)).append(“$all”, true);
       System.out.println(currentOpResults.toJson());

   }

}

有關資訊,我為Percona工作

引用自:https://dba.stackexchange.com/questions/166644